2

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

这是我正在尝试做的一个例子:

<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 中的剩余空间。扩展的内容可以显示在其他任何地方吗?

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

4

1 回答 1

2

我想说做你要求的最简单的方法是不使用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,但这只是给你一个例子

于 2013-05-27T18:58:25.327 回答