2015-06-23 2 views
0

У меня есть TabControl, который содержит StackPanel со многими расширителями. В каждом расширителе я разместил UserControl. Итак, у меня есть четкое представление. UserControl содержит DataGrid. Теперь проблема заключается в том, что высота из DataGrid не задана. Если DataGrid имеет значение lage, чем размер окна, то не отображается полоса прокрутки.WPF: установить размер DataGrid в расширителе

<TabControl SelectionChanged="Selector_OnSelectionChanged" Height="Auto"> 
     <TabItem Header="DoSmth"> 
     </TabItem> 
     <TabItem Header="Misc" Height="Auto"> 
      <StackPanel Height="Auto"> 
       <Expander Header="Misc1" IsExpanded="False" Margin="0,10,0,0"> 
       </Expander>   
       <Expander Header="Misc2" IsExpanded="False" x:Name="Misc2Expander" Expanded="ExpanderMisc2_OnExpanded" Height="Auto" Margin="0,10,0,0"> 
        <view:Misc2View Background="WhiteSmoke" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalContentAlignment="Left" VerticalContentAlignment="Top"/> 
       </Expander>      
      </StackPanel> 
     </TabItem>    
    </TabControl> 

Если я попытался установить высоту в UserControl, отобразится полоса прокрутки, но она не является динамической.

<view:Misc2View .... height="800" ... /> 

Обновление: Я уже пытался установить высоту с Переплет:

Height="{Binding ElementName=Misc2Expander, Path=Height}" 
+0

В UserControl содержится только этот DataGrid? –

+0

Нет, он включает в себя несколько текстовых меток и ярлыков. – Thomas

ответ

1

height из DataGrid внутри UserControl не ограничен, пока вы не установите исправление height явно.

<DataGrid Height="300" ... /> 

Это сделает Scrollbar видимым.

Edit:

Чтобы избежать явного высоты, вы можете использовать Grid с RowDefinitions вместо StackPanel, а затем привязать DataGrid.Height к Expander.ActualHeight, как это:

MainWindow:

<TabControl > 
     <TabItem Header="DoSmth"> 
     </TabItem> 
     <TabItem Header="Misc" > 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto"/> 
        <RowDefinition Height="*"/> 
       </Grid.RowDefinitions> 
       <Expander Grid.Row="0" Header="Misc1" IsExpanded="False" Margin="0,10,0,0"> 
       </Expander> 
       <Expander Grid.Row="1" 
        Header="Misc2" IsExpanded="False" x:Name="Misc2Expander" Margin="0,10,0,0"> 
        <view:Misc2View Background="WhiteSmoke"/> 
       </Expander> 
      </Grid> 
     </TabItem> 
    </TabControl> 

UserControl:

<DataGrid Height="{Binding RelativeSource={RelativeSource AncestorType=Expander}, Path=ActualHeight}" ... /> 

Второй Редактировать

Если я правильно понял ваш вопрос правильно, то вам необходимо установить триггеры для RowDefinitions установить Height в настоящее время расширяется Expander к * в то время как Height других Expanders остаются Auto так:

<TabControl SelectionChanged="Selector_OnSelectionChanged" Grid.Row="0" > 
     <TabItem Header="DoSmth"> 
     </TabItem> 
     <TabItem Header="Misc" > 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Name="GridRow1"> 
         <RowDefinition.Style> 
          <Style TargetType="{x:Type RowDefinition}"> 
           <Setter Property="Height" Value="Auto" /> 
           <Style.Triggers> 
            <DataTrigger Binding="{Binding ElementName=Misc1Expander, 
             Path=IsExpanded}" Value="True"> 
             <Setter Property="Height" Value="*" /> 
            </DataTrigger> 
           </Style.Triggers> 
          </Style> 
         </RowDefinition.Style> 
        </RowDefinition> 
        <RowDefinition Name="GridRow2"> 
         <RowDefinition.Style> 
          <Style TargetType="{x:Type RowDefinition}"> 
           <Setter Property="Height" Value="Auto" /> 
           <Style.Triggers> 
            <DataTrigger Binding="{Binding ElementName=Misc2Expander, 
             Path=IsExpanded}" Value="True"> 
             <Setter Property="Height" Value="*" /> 
            </DataTrigger> 
           </Style.Triggers> 
          </Style> 
         </RowDefinition.Style> 
        </RowDefinition> 
        <RowDefinition Name="GridRow3"> 
         <RowDefinition.Style> 
          <Style TargetType="{x:Type RowDefinition}"> 
           <Setter Property="Height" Value="Auto" /> 
           <Style.Triggers> 
            <DataTrigger Binding="{Binding ElementName=Misc3Expander, 
             Path=IsExpanded}" Value="True"> 
             <Setter Property="Height" Value="*" /> 
            </DataTrigger> 
           </Style.Triggers> 
          </Style> 
         </RowDefinition.Style> 
        </RowDefinition> 
       </Grid.RowDefinitions> 
       <Expander Grid.Row="0" 
        Header="Misc2" IsExpanded="False" x:Name="Misc1Expander" Margin="0,10,0,0"> 
        <view:Misc2View Background="WhiteSmoke"/> 
       </Expander> 
       <Expander Grid.Row="1" 
        Header="Misc2" IsExpanded="False" x:Name="Misc2Expander" Margin="0,10,0,0"> 
        <view:Misc2View Background="WhiteSmoke"/> 
       </Expander> 
       <Expander Grid.Row="2" 
        Header="Misc2" IsExpanded="False" x:Name="Misc3Expander" Margin="0,10,0,0"> 
        <view:Misc2View Background="WhiteSmoke"/> 
       </Expander> 
      </Grid> 
     </TabItem> 
    </TabControl> 

Возможно, вы захотите установить привязку данных на UserControl.Height вместо DataGrid.Height для других элементов вашего UserControl видна:

<UserControl x:Class="view:Misc2View" ... 
      Height="{Binding RelativeSource={RelativeSource AncestorType=Expander}, 
      Path=ActualHeight}" ... /> 
+0

Да, но я не хочу устанавливать статические размеры. – Thomas

+0

@Thomas Посмотреть мое редактирование. –

+0

Я не знаю почему, но это не работает. – Thomas

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