4

我有非常简单的 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>

现在,在折叠扩展器之后,左侧部分 [row=0,col=0] 显示为带有空格的空白。我们想要的是正确的部分 [row=0,col=1] 应该占据整个空间。

在这种情况下应该怎么做?我已尝试将 Horizo​​ntalAlignment="Stretch" 设置为 Tab 控件,但无法正常工作。

我是否需要在折叠时添加事件处理程序并更改网格的宽度..但这似乎不是一个好方法?

任何人都可以提出更好的方法吗?

谢谢

4

3 回答 3

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>

这应该使选项卡控件始终占据整个剩余空间。

于 2013-11-01T09:07:41.283 回答
4

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

    <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 添加到窗口,您应该会看到以下内容

带有扩展器的窗口已扩展!

带有扩展器的窗口已折叠

于 2013-11-01T09:19:10.430 回答
0

你将不得不让你ColumnDefinition.WidthAuto如果你想为你的固定宽度,TabControl你应该WidthTabControl

<Grid Margin="0,50,0,0">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto"/>
     </Grid.ColumnDefinitions>
于 2013-11-01T09:17:36.827 回答