【问题标题】:IsPressed trigger doesn't workIsPressed 触发器不起作用
【发布时间】:2014-09-17 08:24:03
【问题描述】:

样式在资源中:

<Style x:Key="RoundCornerSmart" TargetType="{x:Type vk:SmartButton}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type vk:SmartButton}">
                            <Border CornerRadius="8" BorderBrush="#006AB6" BorderThickness="1" Name="border" Background="{TemplateBinding Background}">
                                <Grid x:Name="grid" >
                                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"></ContentPresenter>
                                </Grid>
                            </Border>
                            <ControlTemplate.Triggers>

                                <Trigger Property="IsPressed" Value="True">
                                    <Setter Property="Background" TargetName="border">
                                        <Setter.Value>
                                            LightGray
                                        </Setter.Value>
                                    </Setter>
                                </Trigger>

                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>

                <Setter Property="Command" Value="{Binding KeyCommand}" />
                <Setter Property="FontSize" Value="8"/>
                <Setter Property="Height" Value="52"/>
                <Setter Property="Width" Value="52"/>
                <Setter Property="Margin" Value="10"></Setter>
                <Setter Property="Foreground" Value="Black"></Setter>
                <Setter Property="Background" Value="White"></Setter>
                <Setter Property="BorderBrush" Value="Black"></Setter>
            </Style>

我有一个名为 SmartButton 的类,它扩展了 Button 类。

<vk:SmartButton Content="Some content" Grid.Column="3" Style="{DynamicResource RoundCornerSmart}" />

对于这个按钮,当我按下它时,背景保持不变(白色),我需要它是浅灰色。我做错了什么?

【问题讨论】:

    标签: wpf xaml button triggers


    【解决方案1】:

    样式 RoundCorner 设置为类型 {x:Type Button}。现在如果你想将它应用到另一个对象,比如 vk:SmartButton 你需要创建新的样式,适合那个类型。

    TargetType={x:Type vk:SmartButton}
    

    【讨论】:

    • 但是智能按钮会从样式中获取所有内容:字体、前景、圆角,而不是按下时的背景。如果类型不合适,为什么它适用于所有其他属性?
    • 显然,只要您不覆盖默认模板,为 Button 类型设置样式即可。那么错误的类型就无法如你所愿。
    【解决方案2】:

    你应该收到了一封XamlParseException,上面写着:

    '设置属性'System.Windows.FrameworkElement.Style'抛出异常。'行号“154”和行位置“44”。

    如果您查看Exception 的详细信息并查看内部Exception,您会看到如下内容:

    'Button'TargetType 与元素类型'SmartButton'不匹配。

    原因很清楚...当您打算为其提供新的ControlTemplate 时,您不能将一种类型的Style 应用于另一种类型的实例尤其是。为了在您的自定义Button 上使用您的Style,您需要复制它并将Style.TargetType 属性设置为:

    <Style x:Key="SmartRoundCorner" TargetType="{x:Type YourPrefix:SmartButton}">
        ...
    </Style>
    

    还值得指出的是,您可能根本不需要扩展 Button 类,因为 WPF 提供了许多其他方法来自定义标准 Button。

    【讨论】:

    • 但是智能按钮会从样式中获取所有内容:字体、前景、圆角,而不是按下时的背景。如果类型不合适,为什么它适用于所有其他属性?
    • 您提出了一个问题,我回答了它,然后您对其进行了更改,以使这些答案不再有意义……这不是本网站的运作方式。据我所知,如果我回答了您的下一个问题而您不喜欢 那个 的答案,那么您可能会再次更改它,所以我现在“退出”了。表现不佳。
    • 我根据你的回答改了,还是不行。您说我需要将目标类型从 Button 更改为 SmartButton。这就是我所做的,但它仍然不起作用。如果你被冒犯了,我很抱歉,这真的不是我的本意。
    • 我一点也不生气,但你似乎不明白你做了什么。将来,请为您的问题添加额外的编辑,而不是更改它们。任何看到这个问题的用户都会想知道为什么这些答案现在与这个问题无关……你已经打破了这个问题的连续性。至于 它仍然不起作用 ...您最初的问题的标题是 IsPressed 适用于一个按钮,但不适用于另一个按钮,您说 我做错了什么?...那个问题由两个用户回答。如果您有后续问题,那么您应该提出一个新问题。
    • 好的,从现在开始我会这样做。不过这个问题已经太迟了。所以,这个问题是由两个用户回答的,但是这两个答案不起作用。
    猜你喜欢
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    相关资源
    最近更新 更多