WPF Отладка datatriggers?

Я пытаюсь сделать что-то очень простое. У меня есть свойство ToggleButton.IsChecked, связанное с bool. Я хочу, чтобы фон переключался между красным (false) и зеленым (true). Но по какой-то причине он, кажется, переключается между красным и без фона. Я использовал конвертер, чтобы проверить, получаю ли я правильные уведомления от источника, и я не знаю, почему один триггер (false/red) работает, а другой (true/green) не работает. Также хотелось бы услышать, как люди отлаживают такие проблемы. Спасибо!

Вот код.

<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>

Обновление: я изменил переключатель на флажок, и он работает. Не знаю, почему...

Ответы

Ответ 1

Попробуйте использовать WPF Inspector:

https://wpfinspector.codeplex.com/

После того, как вы присоединитесь к запущенному WPF-приложению, выделите этот элемент, удерживая нажатой кнопку ctrl+. Затем выберите элемент в визуальном дереве (может быть родителем), который содержит триггер. Перейдите на вкладку триггеров, и вы увидите текущую оценку (например, True == True). Если условие datatrigger выполнено, маленький значок будет оранжевым (горит).

Ответ 2

Мне все хорошо, можете ли вы попробовать изменить конвертер, чтобы вернуть "красный" или "зеленый", а не True/False (и соответственно изменить триггер). Я видел какое-то странное поведение с триггерами WPF при использовании NULL или Booleans в том, что он "отключает" свойство, если оно противоположно вашему значению триггера, вместо использования другого значения триггера.

Что касается их отладки.. Мне бы хотелось узнать, есть ли лучший способ, чем методы хака и надежды, которые я обычно использую для отладки XAML: D