wpf - 如何调整 Expander.Content 的大小?

标签 wpf xaml expander

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="auto"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <!-- … -->
    </Grid.RowDefinitions>
    <TextBlock Grid.Column="0">
        This should be allways visible, even if the expander isn’t expanded!
    </TextBlock>
    <Expander ExpandDirection="Left" Grid.Column="1">
        <Expander.Header>
            <!-- … -->
        </Expander.Header>
        <TreeView MinWidth="50"/>
    </Expander>
    <!-- … -->
</Grid>

我希望用户能够调整 TreeView 的大小。我试图将 TreeView 变形为 Grid 中的 2 列和第一列中的 GridSplitter,但这没有用。有人知道如何让它发挥作用吗?

附言:只有 XAML 的答案会很棒。

最佳答案

您可以使用 Expander.Collapsed 和 Expander.Expanded 事件作为附加事件来解决您的问题。我现在没有只使用 Xaml 的想法,但以下代码在我的情况下效果很好。

Xaml

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow">
    <Grid Expander.Collapsed="Grid_Collapsed" Expander.Expanded="Grid_Expanded">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <!-- … -->
        </Grid.RowDefinitions>
        <TextBlock Grid.Column="0" TextWrapping="Wrap">
        This should be allways visible, even if the expander isn’t expanded!
        </TextBlock>
        <GridSplitter HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="2" />
        <Expander Background="Yellow" ExpandDirection="Left" Grid.Column="1">
            <Expander.Header>test</Expander.Header>
            <TreeView MinWidth="50"/>
        </Expander>
        <!-- … -->
    </Grid>
</Window>

代码隐藏

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private GridLength _rememberWidth = GridLength.Auto;

    private void Grid_Collapsed(object sender, RoutedEventArgs e)
    {
        var grid = sender as Grid;
        if(grid != null)
        {
            _rememberWidth = grid.ColumnDefinitions[1].Width;
            grid.ColumnDefinitions[1].Width = GridLength.Auto;
        }
    }

    private void Grid_Expanded(object sender, RoutedEventArgs e)
    {
        var grid = sender as Grid;
        if (grid != null)
        {
            grid.ColumnDefinitions[1].Width = _rememberWidth;
        }
    }
}

关于wpf - 如何调整 Expander.Content 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7620954/

相关文章:

wpf - ViewModel 中 IDisposable 内存泄漏,为什么?

xaml - 如何通过 Xaml 行为设置图像源属性?

windows-phone-7 - WP7 中的上标和下标

c# - 如何设置Expander Direction水平滑动而不是垂直滑动?

c++ - 有什么方法可以使用c++和wxwidget来实现类似于wpf扩展器的功能

c# - WPF ItemsControl 中的重叠项

WPF:什么会导致 ComboBox 无法虚拟化?

c# - Resharper 对 XAML 不满意

wpf - 如何更改 WPF `<Separator/>` 的高度?

c# - 使用 C# 的短 URL 的长 URL