代码之家  ›  专栏  ›  技术社区  ›  Sean

wpf mutidatatrigger未触发setter

  •  -1
  • Sean  · 技术社区  · 15 年前

    我尝试使用多数据触发器来启用/禁用基于两个文本框值的按钮。

    docs声明多数据触发器中的条件在逻辑上是绑定在一起的。在下面的例子中,如果txtfirst.text是foo,txtsecond.text是bar,我想启用按钮。但是,该按钮始终保持禁用状态(isEnabled=false)。

    我肯定我错过了一个技巧,但彻底搜索谷歌并没有让我找到任何地方……

    <StackPanel>
            <Button IsEnabled="False" Content="OK">
                <Button.Style>
                    <Style>
                        <Style.Triggers>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding ElementName=txtFirst, Path=Text}" Value="foo"/>
                                    <Condition Binding="{Binding ElementName=txtSecond, Path=Text}" Value="bar"/>
                                </MultiDataTrigger.Conditions>
                                <Setter Property="Button.IsEnabled" Value="True"/>
                            </MultiDataTrigger>
                        </Style.Triggers>
                    </Style>
                </Button.Style>
            </Button>
    
            <TextBox x:Name="txtFirst"/>
            <TextBox x:Name="txtSecond"/>
        </StackPanel>
    
    1 回复  |  直到 11 年前
        1
  •  3
  •   Matt Hamilton    15 年前

    直接在对象本身上设置属性会覆盖任何样式触发的设置。将按钮声明更改为:

    <Button Content="OK">
        <Button.Style>
            <Style>
                <Setter Property="IsEnabled" Value="False"/>
                <Style.Triggers>
    

    既然在样式中设置了IsEnabled属性,触发器就可以更改它。别问我为什么。:)