WPF在样式中设置ColumnDefinition.Width无效?

4
我试图使用应用于 ColumnDefinitionStyle,通过一个绑定到名为 CheckMeCheckBoxIsChecked 属性的 DataTrigger,将 ColumnDefinitionWidth"Auto" 更改为 "*"示例代码:
<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代替?
1个回答

6

尝试删除显式宽度声明

<ColumnDefinition Width="Auto">

并将其设置在样式中

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

如果您想在某些条件下使用触发器切换某些属性值,则需要在样式本身中设置这些属性的默认值,否则无论您在setter中设置什么值,由于依赖属性值优先级,这些属性的值始终会被这些属性的本地值覆盖。请参阅依赖属性值优先级

它似乎可以工作,这种行为是否有记录或者只是常见的XAML/WPF知识? - ManIkWeet
是的,这很有用。刚刚投了一票。解决了我的问题。 - Bravo Yeung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接