C# 具有gridSplitter的可调整大小和可协作的gridColumn

C# 具有gridSplitter的可调整大小和可协作的gridColumn,c#,wpf,xaml,togglebutton,gridsplitter,C#,Wpf,Xaml,Togglebutton,Gridsplitter,我想有一个侧边栏,它可以通过按下切换按钮隐藏,并由用户使用GridSplitter控件通过鼠标重新调整大小。最后,我希望它看起来像这样: (请看图片) 以及: (请看图片) 这就是我到目前为止所做的: <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefin

我想有一个侧边栏,它可以通过按下切换按钮隐藏,并由用户使用GridSplitter控件通过鼠标重新调整大小。最后,我希望它看起来像这样:

(请看图片)

以及:

(请看图片)

这就是我到目前为止所做的:

<Grid>
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<GridSplitter Grid.Column="1" HorizontalAlignment="Left" Width="4"
 BorderThickness="1,0" Foreground="{x:Null}" Background="#01000000" BorderBrush="{DynamicResource ColorControlBorder}"/>
<Grid x:Name="grid" Grid.Column="1" Margin="4,0,0,0" Background="{DynamicResource IconErrorFilter}" RenderTransformOrigin="0.5,0.5">
    <Grid.RenderTransform>
        <TransformGroup>
            <ScaleTransform/>
            <SkewTransform/>
            <RotateTransform/>
            <TranslateTransform/>
        </TransformGroup>
    </Grid.RenderTransform>
    <Expander x:Name="expander2" Style="{DynamicResource AddExpanderStyle}" 
        ExpandDirection="Up" Background="#D8FFFFFF" BorderBrush="{DynamicResource ColorControlBorder}"
        DataContext="{Binding FilterTypesPMod}" d:LayoutOverrides="Height" VerticalAlignment="Bottom">
        <Expander.Resources>
            <CollectionViewSource x:Key="CollectionFilterTypes" Source="{Binding FilterTypes}">
                <CollectionViewSource.SortDescriptions>
                    <ComponentModel:SortDescription PropertyName="Order" Direction="Ascending" />
                </CollectionViewSource.SortDescriptions>
            </CollectionViewSource>
        </Expander.Resources>
        <Grid>
            <ItemsControl BorderThickness="0" Background="Transparent" BorderBrush="Transparent"
                ItemsSource="{Binding Source={StaticResource CollectionFilterTypes}}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Bla... />
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </Grid>
    </Expander>
</Grid>
<ToggleButton x:Name="toggleButton" Grid.Column="1" HorizontalAlignment="Left" Style="{DynamicResource CollapsingToggleButtonStyle}" Background="{DynamicResource ColorMainForeground}" RenderTransformOrigin="0.5,0.5">
    <ToggleButton.LayoutTransform>
        <TransformGroup>
            <ScaleTransform/>
            <SkewTransform/>
            <RotateTransform/>
            <TranslateTransform/>
        </TransformGroup>
    </ToggleButton.LayoutTransform>
</ToggleButton>


当我在没有GridSplitter的情况下使用它时,它工作得很好(除了调整大小):当我按下ToggleButton时,网格“Grid”的内容消失,GridColumn(1)变小,为GridColumn(0)留下更多空间。但一旦我放入GridSplitter,自动调整大小就停止了。有人知道如何解决这个问题吗?

我试图重现你的情景,看起来我理解你的情况。这就是你的问题所在-

如果只使用
切换按钮
,则列将正确展开/折叠; 如果使用
GridSplitter
,则它也会正确展开/折叠; 但是如果您使用
GridSplitter
,然后尝试使用
ToggleButton
这样,柱将无法正确收缩

是我用来复制问题的xaml

原因是,一旦使用
GridSplitter
,它会将列的宽度更改为固定值,因此不再为真;它被更改为固定值
。现在,即使该列中的内容被折叠,列宽仍保持不变(即154)。使用SNOOP可以很容易地验证这一点

解决这个问题的一个方法是,当按下ToggleButton(通过动画或代码)时,将第二列的宽度更改为
Auto
;通过动画设置列的宽度不是一件简单的事情,但是一些解决方法(创建
GridLengthAnimation
)是可用的,如这些问题中所述-


听起来你的问题和这个问题一样:


正如akjoshi所解释的,GridSplitter会更改行的高度属性(列的宽度属性)。如果在使用GridSplitter调整行或列的大小后,检查Height或Width属性的值源,您将看到它被设置为“local”。“本地”值覆盖由样式、模板或触发器设置的任何值。清除“高度”或“宽度”属性可以使用触发器和/或样式再次设置“高度”或“宽度”属性。

需要更多详细信息才能提供帮助。1.你的很多款式都不见了。按下切换按钮时,您在做什么?由于这可能是一个小问题,如果你能上传一个小样本来重现你的问题,那将是最好的。目前我正忙于其他事情,但我会尽快看一看(可能下周开始),但谢谢你回答我。。。你是对的;我忘了发布所有的styletriggers:我会尽快添加它们…让我们知道你的发现,发布你的解决方案会很好。谢谢你的回答。