样式中的WPF设置ColumnDefinition.Width不起作用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了样式中的WPF设置ColumnDefinition.Width不起作用?相关的知识,希望对你有一定的参考价值。

我试图将WidthColumnDefinition"Auto"更改为"*",使用Style应用于我的ColumnDefinition。在我的Style是一个DataTrigger绑定到IsChecked称为CheckBoxCheckMe属性。

示例代码:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto">
            <ColumnDefinition.Style>
                <Style TargetType="ColumnDefinition">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=CheckMe,Path=IsChecked}" Value="True">
                            <Setter Property="Width" Value="*" />
                            <Setter Property="MinWidth" Value="300" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=CheckMe,Path=IsChecked}" Value="False">
                            <Setter Property="Width" Value="Auto" />
                            <Setter Property="MinWidth" Value="50" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ColumnDefinition.Style>
        </ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Border Background="Green">
        <CheckBox x:Name="CheckMe" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
            <TextBlock Text="Use * width" />
        </CheckBox>
    </Border>
    <StackPanel Grid.Column="1">
        <TextBlock Text="Second column" />
    </StackPanel>
</Grid>

在我的示例代码中,我还设置了MinWidth属性,该属性确实有效。

这可能吗?也许使用自定义AttachedProperty代替?

答案

尝试删除显式宽度声明

<ColumnDefinition Width="Auto">

并将其设置为风格

<ColumnDefinition>
     <ColumnDefinition.Style>
         <Style TargetType="ColumnDefinition">
             <Setter Property="ColumnDefinition.Width" Value="Auto"/>

如果要根据某些条件使用触发器切换某些属性值,则需要在样式本身中设置这些属性的默认值,否则无论您在setter中设置什么值,属性值都将始终被本地值覆盖由于dependency property value precedence的那些属性。

以上是关于样式中的WPF设置ColumnDefinition.Width不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

网格忽略 WPF 中的 ClipToBounds

WPF 框架开发 ColumnDefinition 和 RowDefinition 的代码在哪

通过 WPF 中的绑定动态设置资源样式

如何在C#/ wpf中启用datagrid列文本

DataTemplate WPF 中样式设置器中的绑定

如果样式已经设置,如何覆盖 WPF 子控件样式?