C# 网格进食空间中的WPF扩展器

C# 网格进食空间中的WPF扩展器,c#,wpf,expander,C#,Wpf,Expander,我有非常简单的xaml <Grid Margin="0,50,0,0"> <Grid.ColumnDefinitions> <ColumnDefinition Width="30*" /> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Grid.RowDefini

我有非常简单的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]应该占据整个空间

在这种情况下应该怎么做? 我已尝试将HorizontalAlignment=“Stretch”设置为选项卡控件,但不起作用

我是否需要添加事件处理程序,如折叠和更改网格宽度。。但这似乎不是个好办法

有人能提出更好的办法吗


谢谢

使用网格并不是实现目标的最佳方式。您应该使用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>


这将使选项卡控件始终占据剩余的全部空间。

您必须将
列定义.宽度
设置为
自动
,如果您希望为
选项卡控件
设置固定宽度,则应将
宽度
设置为
选项卡控件

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

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

    <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>

扩展器文本
选项卡1的文本
选项卡1的文本
如果将上面的xaml添加到窗口中,应该会看到以下内容


在上面尝试了ColumnDefinition auto,但之后只显示Expander,折叠时只显示Tabcontrol。如果将上述代码放在大小合理的窗口中,您将首先看到Expander文本和选项卡。标签会很窄。收拢扩展器时,扩展器文本将消失,选项卡将占据整个窗口(除扩展器按钮外)。您是否完全按照上述方式尝试xaml?您看到了什么问题?它的工作原理和我预期的一样,但也许你正在尝试做一些不同的事情。谢谢你的评论。尝试了此操作,但更改后,仅显示Expander,折叠时仅显示Tabcontrol。所以每次只显示expander或tabcontrol。谢谢您的评论。尝试了此操作,但更改后,仅显示Expander,折叠时仅显示Tabcontrol。所以一段时间只显示expander或tabcontrol。我只是在本地尝试了一下,结果成功了。总之,我们可以看到整个页面代码?是的。。这对我有用。问题是xaml再次使用网格。谢谢