【问题标题】:Issues with WPF Trigger EventsWPF 触发器事件的问题
【发布时间】:2017-02-23 19:52:41
【问题描述】:

我正在尝试在 WPF 应用程序中创建一些按钮,这些按钮具有基于当前对按钮执行的操作的触发事件。我无法添加多个触发事件。在下面的代码中,isPressed 的触发器不起作用,但 isMouseOver 可以。如果我删除其中一个触发器,它可以工作,但它们永远不会一起工作。

如果按钮被禁用但触发器属性似乎不包含禁用的任何内容,我还需要添加图像更改。我可能必须在 C# 代码中进行此更改。如果有人对此有想法,那就太好了!

感谢任何帮助!

<Button Name="testbutton"       
        Background="Transparent"
        Cursor="Hand"
        Visibility="Visible" Grid.Column="2"  Grid.Row="1" Margin="10" ToolTip="Exits The Application">
            <Button.Template>
                <ControlTemplate TargetType="Button">
                    <StackPanel>
                        <Image Name="exitstatic"
                                Source="{StaticResource exit static}"
                                Stretch="Fill"
                                Visibility="Visible" />
                        <Image Name="exithover"
                                Source="{StaticResource exit hover}"
                                Stretch="Fill"
                                Visibility="Collapsed" />
                        <Image Name="exitdisabled"
                                Source="{StaticResource exit disabled}"
                                Stretch="Fill"
                                Visibility="Collapsed" />
                    </StackPanel>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsPressed"
                                 Value="true">
                            <Setter TargetName="exitdisabled"
                                    Property="Visibility"
                                    Value="Visible" />
                            <Setter TargetName="exithover"
                                    Property="Visibility"
                                    Value="Collapsed" />
                        </Trigger>

                        <Trigger   Property="IsMouseOver"
                                        Value="true">
                            <Setter TargetName="exithover"
                                    Property="Visibility"
                                    Value="Visible" />
                            <Setter TargetName="exitstatic"
                                    Property="Visibility"
                                    Value="Collapsed" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Button.Template>
        </Button>

【问题讨论】:

    标签: c# wpf eventtrigger


    【解决方案1】:

    只要IsPressed 为真,IsMouseOver 也为真,因为鼠标必须在那里才能按下。实际上,应用了IsPressed 触发器设置器,但随后应用了IsMouseOver 触发器设置器并执行IsPressed 设置器所做的工作。

    颠倒两个触发器的顺序,因此 IsPressed 触发器将被第二次评估,并改为使用 IsPressed 设置的值。这是触发器的常见问题。

    就您的第二个问题而言,&lt;Trigger Property="IsEnabled" Value="False"&gt; 从来没有遇到过任何问题。

    【讨论】:

    • @mcavanaugh418,同意,触发器按所列顺序处理...无论是最后的获胜者。
    • 谢谢埃德。它是如此简单,我不敢相信我一开始就没有抓住它。我也一定错过了 IsEnabled 属性。谢谢你指出,正是我需要的。
    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多