我有非常简单的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]应占用整个空间。
在这种情况下该怎么办? 我尝试过HorizontalAlignment =“Stretch”到Tab控件,但没有工作。
我是否需要在崩溃时添加事件处理程序并更改网格的宽度..但它似乎没有好办法?
有人能提出更好的方法吗?
由于
答案 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添加到窗口,您应该看到以下
答案 2 :(得分:0)
您必须ColumnDefinition.Width
至Auto
,如果您想要TabControl
的固定宽度,则应将Width
提供给TabControl
。
<Grid Margin="0,50,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>