触发器不适用于ToggleButton.IsChecked属性

时间:2014-04-03 08:11:55

标签: c# wpf xaml togglebutton

这是一个带触发器的简单XAML,它应该在检查时更改ToggleButton内容。但由于某种原因,它不起作用。我有一种愚蠢的感觉,我错过了一些特别小的东西。感谢您的帮助

<ToggleButton Content="&lt;">
    <ToggleButton.Style>
        <Style TargetType="ToggleButton">
            <Style.Triggers>
                <Trigger Property="IsChecked" Value="True">
                    <Setter Property="Content" Value="&gt;" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ToggleButton.Style>
</ToggleButton>

2 个答案:

答案 0 :(得分:3)

您必须将Content="&lt;" ToggleButton 移至Style的设置者。

示例:

<ToggleButton>
    <ToggleButton.Style>
        <Style TargetType="ToggleButton">
            <Setter Property="Content" Value="&lt;" />

            <Style.Triggers>
                <Trigger Property="IsChecked" Value="True">
                    <Setter Property="Content" Value="&gt;" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ToggleButton.Style>
</ToggleButton>

因为本地值在样式设置器和触发器上有 higher precedence 顺序:

  1. 物业系统强制。

  2. 动态动画或具有保留行为的动画。

    3. Local value.

  3. TemplatedParent模板属性。

  4. 隐含的风格。

    6. Style triggers.

  5. 模板触发器。

    8. Style setters.

  6. ...

    有关详细信息,请参阅:

    MSDN: Dependency Property Value Precedence

答案 1 :(得分:2)

您通过在控件级别设置Content属性来覆盖触发器设置的Content。您想在样式中使用Setter来设置它:

<ToggleButton>
    <ToggleButton.Style>
        <Style TargetType="ToggleButton">
         <Setter Property="Content" Value="&lt;" />
            <Style.Triggers>
                <Trigger Property="IsChecked" Value="True">
                    <Setter Property="Content" Value="&gt;" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ToggleButton.Style>
</ToggleButton>