c# - 在Grid中使用Expander,扩展区域使用所有空间

标签 c# wpf grid expander

我在 Grid 中有一个 Expander。 有没有一种简单的方法可以让扩展器使用可用空间(可能是网格中的一整行)?

这是我正在尝试做的示例:

<Window x:Class="WpfExpanderSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="200" Width="400">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*"  />
            <ColumnDefinition Width="1*"  />
            <ColumnDefinition Width="1*"  />
            <ColumnDefinition Width="1*"  />
            <ColumnDefinition Width="2*"  />
        </Grid.ColumnDefinitions>

        <TextBlock Grid.Column="0" Text="11111" />
        <TextBlock Grid.Column="1" Text="22222" />
        <TextBlock Grid.Column="2" Text="33333" />
        <TextBlock Grid.Column="3" Text="44444" />
        <TextBlock Grid.Column="4" Text="55555" />
        <Expander Grid.Column="5" Header="Expand me" ExpandDirection="Down" FlowDirection="RightToLeft" >
            <TextBlock Grid.Row="1" Text="Expanded text which is eventually very long and shall take all space available" />
        </Expander>
    </Grid>
</Window>

现在我希望扩展区域“占据”网格中的整行。 它似乎只占用该 GridCell 中的剩余空间。 扩展后的内容可以显示在其他地方吗?

我必须制作一个额外的按钮才能实现我想要的吗? (为扩展区域设置一些可见属性或类似的东西)?

最佳答案

我想说,完成您所要求的操作的最简单方法是不使用 Expander。您可以将 Grid 放在顶部,并在右侧放置一些 ToggleButton,并控制下面的 Visibility 将取决于 ToggleButton.IsChecked

<StackPanel>
   <StackPanel.Resources>
       <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
   </StackPanel.Resources>
   <Grid>
       <Grid.ColumnDefinitions>
           <ColumnDefinition/>
           <ColumnDefinition/>
           <ColumnDefinition/>
           <ColumnDefinition/>
           <ColumnDefinition/>
       </Grid.ColumnDefinitions>
       <TextBox Text="0" Grid.Column="0"/>
       <TextBox Text="1" Grid.Column="1"/>
       <TextBox Text="2" Grid.Column="2"/>
       <TextBox Text="3" Grid.Column="3"/>
       <ToggleButton Content="V" Grid.Column="4" x:Name="btnExpander"/>
   </Grid>
   <Grid Visibility="{Binding ElementName=btnExpander, Path=IsChecked, Converter={StaticResource BooleanToVisibilityConverter}}">
       <TextBlock Text="LongText"/>
   </Grid>
</StackPanel>

当然ToggleButton需要一些像样的Template,但这只是给你一个例子

关于c# - 在Grid中使用Expander,扩展区域使用所有空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16778671/

相关文章:

c# - C++ 和 C# 之间的并排依赖关系

c# - 如何在MVC环境下实现DIP?

c# - 我可以用 LINQ 做到这一点吗?

c# - WPF:如何自动生成行标题而不仅仅是列标题?

c# - Windows Phone 8.1 MediaElement 灾难性故障(HRESULT 异常 : 0x8000FFFF (E_UNEXPECTED))

c# - "MouseLeftButtonDown"TreeViewItem 中未引发事件,为什么?

html - CSS制作一个单元格网格,每个单元格填充其行的100%高度

html - 创建没有 div 容器的 CSS 网格

c# - 如何检测 Microsoft Band 版本

Java:生成任意大小的基于平铺的圆圈