【发布时间】:2012-03-14 12:25:04
【问题描述】:
我得到了一个带有标签、按钮和文本框的网格。如果 label.Content 的值 =“Invalid”,我想将标签前景设置为红色,并将按钮属性“IsEnabled”设置为 False。但是我无法在此数据触发器中将设置器设置为目标名称,因为 “无法在样式设置器上设置 Targetame 属性。”我该如何解决这个问题,这样我就可以只用一个触发器对多个元素使用 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:如果我评论了第二个 setter,那么它就可以工作,(如果标签的值 = "Invalid" 那么前景变成红色
【问题讨论】:
-
您想在这里使用隐式样式有什么特别的原因吗?你不是说
吗? -
@Baboon 我不知道但不一样吗?
-
不一样。隐式样式适用于特定 FrameworkElement 的全局设置器。现在,我相信您只是将该样式应用于标签的子项,而不是标签本身。不过我可能是错的。
标签: c# wpf xaml setter datatrigger