WPF - 网格中的扩展器 - 占用空间

时间:2013-11-01 08:54:59

标签: c# wpf expander

我有非常简单的xaml。

<Grid Margin="0,50,0,0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="30*" />
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <!--<RowDefinition Height="50"/>-->
        </Grid.RowDefinitions>
 <Expander Header=""
          HorizontalAlignment="Left"
          VerticalAlignment="Stretch"
          ExpandDirection="Right"
          IsExpanded="True"
          Grid.Column="0" 
          Grid.Row="0"
          Height="Auto"
           >
<!-- My List control -->
</Expander>
<TabControl Name="ExecutionTab" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch">
<!-- soem tabs here -->
</TabControl>
</Grid>

现在,在对扩展器进行collasping之后,左侧部分[row = 0,col = 0]显示为空,带空格。 我们想要的是正确的部分[row = 0,col = 1]应占用整个空间。

在这种情况下该怎么办? 我尝试过Horizo​​ntalAlignment =“Stretch”到Tab控件,但没有工作。

我是否需要在崩溃时添加事件处理程序并更改网格的宽度..但它似乎没有好办法?

有人能提出更好的方法吗?

由于

3 个答案:

答案 0 :(得分:7)

使用网格并不是实现目标的最佳方式。您应该使用DockPanel而不是LastChildFill =“true”。我现在不能尝试,但我会想象它:

<DockPanel LastChildFill="true">
 <Expander Header=""
          HorizontalAlignment="Left"
          VerticalAlignment="Stretch"
          ExpandDirection="Right"
          IsExpanded="True"
          DockPanel.Dock="Left"
          Height="Auto"
           >
<!-- My List control -->
</Expander>
<TabControl Name="ExecutionTab" HorizontalAlignment="Stretch">
<!-- soem tabs here -->
</TabControl>
</DockPanel>

这应该使标签控件始终占用整个剩余空间。

答案 1 :(得分:3)

您可以通过将列定义设置为:

来完成此工作
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>

显示此工作的完整代码如下:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>

    <Expander ExpandDirection="Right" IsExpanded="True">
     <TextBlock FontSize="50">Text For Expander</TextBlock>
    </Expander>
    <TabControl Name="ExecutionTab" Grid.Column="1">
        <TabItem Header="Tab 1">
            <TextBox FontSize="50" TextWrapping="Wrap">Text for Tab 1</TextBox>
        </TabItem>
        <TabItem Header="Tab 2">
            <TextBox FontSize="50" TextWrapping="Wrap">Text for Tab 1</TextBox>
        </TabItem>
    </TabControl>
</Grid>

如果您将上面的xaml添加到窗口,您应该看到以下

Window with Expander expanded!

Window with Expander collapsed

答案 2 :(得分:0)

您必须ColumnDefinition.WidthAuto,如果您想要TabControl的固定宽度,则应将Width提供给TabControl

<Grid Margin="0,50,0,0">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto"/>
     </Grid.ColumnDefinitions>