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

问题描述 投票:1回答:1

我试图将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代替?

c# wpf xaml
1个回答
1
投票

尝试删除显式宽度声明

<ColumnDefinition Width="Auto">

并将其设置为风格

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

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

© www.soinside.com 2019 - 2024. All rights reserved.