2009-10-15 3 views
0

Может кто-нибудь, возможно, объяснить мне, почему следующий простой пример работы:Как получить элементы управления WPF GridSplitter, работающие внутри элемента ItemsControl?

<ItemsControl x:Class="UserControl1" 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Grid /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition Height="5" /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 

     <Grid Background="Yellow" /> 

     <GridSplitter Grid.Row="1" 
         HorizontalAlignment="Stretch" 
         VerticalAlignment="Stretch" /> 

     <Grid Grid.Row="2" 
       Background="Orange" /> 
    </Grid> 
</ItemsControl> 

... но когда я делаю основной один в ItemsPanelTemplate, он не делает:

<ItemsControl x:Class="UserControl1" 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition /> 
        <RowDefinition Height="5" /> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 
      </Grid> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

    <Grid Background="Yellow" /> 

    <GridSplitter Grid.Row="1" 
        HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" /> 

    <Grid Grid.Row="2" Background="Orange" /> 
</ItemsControl> 

Они оба отображает индикатор Желтый ящик поверх оранжевой коробки с горизонтальным разветвителем между ними. В первом примере сплиттер работает правильно, позволяя изменять размеры этих двух областей. Во втором примере (который создает почти идентичное визуальное дерево) разделитель заблокирован, он не позволит мне перетащить его, чтобы изменить размеры двух областей!

Это очень упрощенный пример того, чего я пытаюсь достичь, но он демонстрирует проблему, которую я получаю в своем реальном приложении. Мне что-то не хватает, что мешает сплиттеру работать? Все трое детей добавляются в сетку ItemsPanelTemplate ok ....

Любые объяснения или исправления были бы высоко оценены!

С уважением, Дэйв

ответ

3

ой никто не ответил? это потому, что GridSplitter должен быть непосредственным дочерним элементом родительской сетки, чтобы узнать фактический размер столбцов.

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