2013-12-04 2 views
0

У меня возникли проблемы, когда после нескольких перетаскиваний (кажется, изначально он работает нормально, вам также нужно отпустить кнопку мыши между каждым перетаскиванием), похоже, что сплиттер сетки застрял и не позволяет перетащить его больше, или иногда он будет только перетаскивать несколько дюймов, а затем снова застревать.Захват GridSplitter

Код, который я использую, фактически находится в ItemTemplate, но для демонстрации проблемы я извлек код проблемы ниже.

<StackPanel Grid.IsSharedSizeScope="True"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="auto" SharedSizeGroup="SharedColumnWidth" /> 
       <ColumnDefinition Width="auto" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 

      <Label Content="Name" 
        Grid.Column="0" /> 
      <GridSplitter HorizontalAlignment="Center" 
          VerticalAlignment="Stretch" 
          Grid.Column="1" 
          Width="5" /> 
      <TextBox Grid.Column="2"/> 
     </Grid> 
    </StackPanel> 

(Скопируйте и вставьте элемент сетки, так что есть несколько в StackPanel, я нашел GridSplitter застрять быстрее, если у вас есть по крайней мере 10 сеток).

Как вы упомянули выше, если вы попытаетесь изменить размер несколько раз (высвобождая кнопку мыши между каждым перетаскиванием), после изменения 5-10 сплиттер, похоже, застрял, по крайней мере, для меня.

Он также кажется застрявшим, когда вы пытаетесь перетащить влево.

ответ

1

Да, это хорошо известная ошибка:

http://connect.microsoft.com/VisualStudio/feedback/details/509801/

Существует обходной путь для этого, например, привязать к свойству модели представления в. Это было бы так:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="{Binding Path=Width, Mode=TwoWay}" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 
    .... 
</Grid> 

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="{Binding Path=Width, Mode=TwoWay}" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 
    .... 
</Grid> 

И поэтому эти две сетки будут иметь одинаковую ширину для первой колонки.

Этот подход требует использования надлежащего ViewModel. :)

Edit:

Я забыл GridSplitter однако идея заключается в использовании привязок к тому же собственности, и поэтому для обеспечения совместного использования размеров ... Place GridSplitter внутри, но самое главное не использовать эти SharedSizeGroup тегов ,

+0

Как это обходное решение? .. теперь нет GridSplitters. – wforl

+0

Ну, я забыл GridSplitter, но идея состоит в том, чтобы использовать Bindings для одного и того же свойства и, следовательно, предоставлять размеры разделов ... Place GridSplitter внутри, но самое главное - не использовать теги sharedsizegroup. –

Смежные вопросы