带GridSplitter的WPF扩展器

伊利亚·索洛维耶夫(Ilya Solovyev)

在我的WPF窗口(.NET 4.0)中,网格包含两列:左侧的拉伸文本框(或其他内容)和右侧的Expander。同样在Expander中,我有GridSplitter,它用于在Expander扩展时调整左右列的大小。但这是行不通的。

这是我的XAML代码:

<Window x:Class="WpfApplication10.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid ShowGridLines="True" >
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition Width="Auto" Name="column"/>
    </Grid.ColumnDefinitions>

    <TextBox Grid.Column="0" HorizontalAlignment="Stretch" TextWrapping="Wrap" 
             Text="TextBox" VerticalAlignment="Stretch" Background="Aqua"/>

    <Expander Grid.Column="1" Header="Expander" ExpandDirection="Left" 
              HorizontalAlignment="Right" Background="LightBlue" >
        <Expander.Content>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="5"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>

                <TextBlock Text="Some text Some text Some Text" Grid.Column="1"/>
                <GridSplitter Grid.Column="0" Width="5"    
                              ResizeBehavior="PreviousAndCurrent"
                              ResizeDirection="Columns" 
                              HorizontalAlignment="Stretch"/>
            </Grid>
        </Expander.Content>
    </Expander>
</Grid></Window>

找到合适的解决方案。XAML:

<Window x:Class="WpfApplication10.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">

<Window.Resources>
    <BooleanToVisibilityConverter x:Key="BoolToVisConverter"/>
</Window.Resources>

<Grid ShowGridLines="True">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" Name="leftColumn"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto" Name="rightColumn" />
    </Grid.ColumnDefinitions>

    <TextBox Grid.Column="0"
             HorizontalAlignment="Stretch"
             TextWrapping="Wrap"
             Text="TextBox"
             VerticalAlignment="Stretch"
             Background="Aqua" />

    <Expander Grid.Column="2"
              Name="Expander"
              Header="Expander"
              ExpandDirection="Left"
              Background="LightBlue" 
              Collapsed="Expander_Collapsed" 
              Expanded="Expander_Expanded" >
        <TextBlock Text="Some text Some text Some Text" />
    </Expander>
    <GridSplitter Grid.Column="1"
                  Width="5"
                  ResizeBehavior="PreviousAndNext"
                  ResizeDirection="Columns"
                  VerticalAlignment="Stretch"
                  Height="Auto" 
                  Visibility="{Binding ElementName=Expander, Path=IsExpanded, 
                              Converter={StaticResource BoolToVisConverter}}"/>
</Grid></Window>

后台代码:

    private void Expander_Collapsed(object sender, RoutedEventArgs e)
    {
        leftColumn.Width = new GridLength(1, GridUnitType.Star);
        rightColumn.Width = new GridLength(1, GridUnitType.Auto);
    }

    private void Expander_Expanded(object sender, RoutedEventArgs e)
    {
        rightColumn.Width = new GridLength(1, GridUnitType.Star);
    }
XAMeLi

您的网格拆分器在内部网格(在扩展器中)上工作,而不在主网格上工作。试试这个:

<Window x:Class="WpfApplication10.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Height="350"
        Width="525">
    <Grid ShowGridLines="True">
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition Width="5" />
            <ColumnDefinition Width="Auto"
                              Name="column" />
        </Grid.ColumnDefinitions>

        <TextBox Grid.Column="0"
                 HorizontalAlignment="Stretch"
                 TextWrapping="Wrap"
                 Text="TextBox"
                 VerticalAlignment="Stretch"
                 Background="Aqua" />

        <Expander Grid.Column="2"
                  Header="Expander"
                  ExpandDirection="Left"
                  Background="LightBlue">
            <TextBlock Text="Some text Some text Some Text" />
        </Expander>
        <GridSplitter Grid.Column="1"
                      Width="5"
                      ResizeBehavior="PreviousAndNext"
                      ResizeDirection="Columns"
                      VerticalAlignment="Stretch"
                      Height="Auto" />
    </Grid>
</Window>

现在,您需要处理用户展开/折叠扩展器时最后一列发生的情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带GridSplitter的WPF扩展器

来自分类Dev

扩展器与GridSplitter结合

来自分类Dev

扩展器与GridSplitter结合

来自分类Dev

带多个按钮的WPF扩展器

来自分类Dev

WPF扩展器未扩展

来自分类Dev

WPF扩展器未扩展

来自分类Dev

WPF +扩展器控制问题

来自分类Dev

WPF如何始终在TreeView上显示扩展器

来自分类Dev

WPF扩展器控件-转换的页眉宽度问题

来自分类Dev

使用触摸滑动来拖动打开WPF扩展器

来自分类Dev

WPF-网格扩展器-用餐空间

来自分类Dev

wpf-扩展器标题适合内容宽度?

来自分类Dev

扩展器内部列表框的VerticalScrollBar-WPF

来自分类Dev

ItemsControl中使用的WPF扩展器叠加层

来自分类Dev

在WPF中,根据组合框输入创建扩展器

来自分类Dev

无法使用样式禁用WPF扩展器

来自分类Dev

WPF-Stackpanel中有多个扩展器的问题

来自分类Dev

WPF动态创建的按钮和扩展器控件

来自分类Dev

带有扩展器的WPF分组组合框

来自分类Dev

在WPF扩展器控件上更改边框的拐角半径?

来自分类Dev

在WPF中,根据组合框输入创建扩展器

来自分类Dev

使用触摸滑动来拖动打开WPF扩展器

来自分类Dev

WPF扩展器覆盖元数据IsExpandedProperty

来自分类Dev

如何停止WPF控件(使用扩展器)在ItemControl中扩展到父级的高度

来自分类Dev

WPF DataGrid扩展器中的分组行在右侧添加了额外的列,当所有扩展器都关闭时消失

来自分类Dev

WPF扩展器-鼠标悬停时突出显示标题

来自分类Dev

具有多个功能按钮的C#WPF扩展器

来自分类Dev

如何以编程方式增加wpf扩展器内容的宽度?

来自分类Dev

如何以编程方式增加wpf扩展器内容的宽度?