为什么我不能使用DataTrigger来设置TextBox.IsEnabled = True?

7
在我的应用程序中,我有一个TextBox,我想根据数据上下文中的枚举启用/禁用它。该枚举有三个值(任何人,我,某人),当值设置为“某人”时,我想启用Textbox。我能够通过反向设置值来解决问题(见下文)。但是,请问为什么第一种解决方案不起作用?
这种方法无效...
<TextBox Text="{Binding ModifiedUser, UpdateSourceTrigger=PropertyChanged}"
         IsEnabled="False">
    <TextBox.Style>
        <Style TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ModifiedBy}"
                             Value="Someone">
                    <Setter Property="IsEnabled"
                            Value="True" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

奇怪的是,这段代码确实有效。

<TextBox Text="{Binding ModifiedUser, UpdateSourceTrigger=PropertyChanged}">
    <TextBox.Style>
        <Style TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ModifiedBy}"
                             Value="Anyone">
                    <Setter Property="IsEnabled"
                            Value="False" />
                </DataTrigger>
                <DataTrigger Binding="{Binding ModifiedBy}"
                             Value="Me">
                    <Setter Property="IsEnabled"
                            Value="False" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>
1个回答

17

你需要在你的样式中设置初始的isEnabled。否则,你的"local" IsEnabled=false将永远占优!

更改你的样式,它就会正常工作。

<TextBox Text="{Binding ModifiedUser, UpdateSourceTrigger=PropertyChanged}">
<TextBox.Style>
    <Style TargetType="{x:Type TextBox}">
        <Setter Property="IsEnabled" Value="False" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding ModifiedBy}"
                         Value="Someone">
                <Setter Property="IsEnabled"
                        Value="True" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</TextBox.Style>


谢谢!我知道我漏掉了什么。 - Nescio
1
今天的课程对我来说是一次学习 :-) - dba
谢谢,我之前没有注意到控件上的 IsEnabled 属性会覆盖 Setter。你救了我的心智! - GrahamS

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