我正在尝试做一些非常简单的事情。我有一个绑定到bool的ToggleButton.IsChecked属性。我希望背景在红色(假)和绿色(真)之间切换。但由于某种原因,它似乎是在红色和无背景之间切换。我使用转换器来检查我是否从源获得正确的通知我是,所以不确定为什么一个触发器(假/红色)工作而另一个(真/绿色)不起作用。还想听听人们如何调试这类问题。谢谢!
这是代码。
<DataTemplate x:Name"Flipper">
<StackPanel>
...
<ToggleButton IsChecked="{Binding Path=BoolValue,
Converter={StaticResource converter}}"
Name="onoff" >
</ToggleButton>
...
<StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding ElementName=onoff,Path=IsChecked}"
Value="True">
<Setter TargetName="onoff" Property="Background" Value="Green"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=onoff,Path=IsChecked}"
Value="False">
<Setter TargetName="onoff" Property="Background" Value="Red"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
更新:我将togglebutton更改为复选框,它可以正常工作。不知道为什么......
答案 0 :(得分:7)
尝试使用WPF Inspector:
https://wpfinspector.codeplex.com/
连接到正在运行的WPF应用程序后,按住ctrl +单击它突出显示有问题的元素。然后,选择包含触发器的可视树中的元素(可能是父元素)。单击触发器选项卡,您可以看到当前评估(例如,True == True)。如果满足datatrigger条件,则小图标将为橙色(亮起)。
答案 1 :(得分:1)
对我来说没问题,你能不能尝试改变转换器以返回“红色”或“绿色”而不是True / False(并相应地改变触发器)。我在使用NULL或布尔值时看到了WPF触发器的一些奇怪的行为,如果它与你的触发值相反,它“取消”属性,而不是使用另一个触发值。
至于调试它们..我很想知道是否有一种比我通常用于XAML调试的黑客和希望方法更好的方法:D