15

我正在尝试做一些非常简单的事情。我有一个绑定到布尔的 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>

更新:我将切换按钮更改为复选框,它可以工作。不知道为什么...

4

2 回答 2

7

尝试使用 WPF 检查器:

https://wpfinspector.codeplex.com/

附加到正在运行的 WPF 应用程序后,按住 ctrl 并单击它,突出显示有问题的元素。然后,在可视化树中选择包含触发器的元素(可能是父元素)。单击触发器选项卡,您可以看到当前评估(例如 True == True)。如果满足数据触发条件,小图标将变为橙色(亮起)。

于 2011-05-03T21:32:03.027 回答
1

对我来说看起来不错,您可以尝试更改转换器以返回“红色”或“绿色”而不是 True/False(并相应地更改触发器)。在使用 NULL 或布尔值时,我已经看到 WPF 触发器的一些奇怪行为,因为如果它与您的触发器值相反,它会“取消设置”该属性,而不是使用另一个触发器值。

至于调试它们.. 我很想知道是否有比我通常用于 XAML 调试的 hack 和希望方法更好的方法:D

于 2009-01-05T14:12:09.270 回答