首页 文章

WPF on触发器在不同的控件上执行多个setter

提问于
浏览
0

我有一个带有标签,按钮和文本框的网格 . 我想将标签forground设置为红色,将按钮属性“IsEnabled”设置为False,如果label.Content =“Invalid”的值 . 但是我无法将setter设置为此数据触发器中的targetname,因为“无法在样式设置器上设置Targetame属性” . 我怎么能解决这个问题,所以我只需要1个触发器即可为多个元素使用setter,我知道我可以在Button.Styletriggers中使用完全相同的数据触发器,但也许有更好的方法可以做到这一点?

<Button Content="Save" Click="btnsave_Click" Grid.Column="1" Grid.Row="2" x:Name="btnsave" IsEnabled="True" />
            <Label Content="{Binding ElementName=txtclc, Path=Text, Converter={StaticResource convertcode}}" Name="lblcheckclc"  Grid.Row="1" Grid.Column="2">
                <Label.Resources>
                    <Style TargetType="{x:Type Label}">
                        <Setter Property="Foreground" Value="Green" />

                        <Style.Triggers>
                            <DataTrigger  Binding="{Binding ElementName=lblcheckclc, Path=Content}" Value="Invalid">
                                <Setter Property="Foreground" Value="Red" />
                                <Setter TargetName="btnsave" Property="IsEnabled" Value="False"  /> <!--This line is the problem-->

                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Label.Resources>
            </Label>

PS:如果我评论第二个二传手,那么它可以工作,(如果标签的值=“无效”,那么forground变成红色

1 回答

  • 0

    请查看this msdn forum以获得您问题的答案

    你的触发器部分也是incorect,你应该使用:

    <Style.Triggers>
       <Trigger Property="Content" Value="Invalid">
          <Setter Property="Foreground" Value="Red" />
       </Trigger>
    </Style.Triggers>
    

    当您计划监视元素的属性(如内容)时,请使用触发器 .

    为了使您的示例工作:

    • 绑定按钮's IsEnabled property to your label'的内容并实现将字符串转换为bool的转换器

    • 使用设置IsEnabled属性的数据触发器为按钮创建样式

相关问题