WPF 触发器事件的问题

Issues with WPF Trigger Events

我正在尝试在 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>

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

颠倒两个触发器的顺序,因此 IsPressed 触发器将在第二个被评估,并改为执行 IsPressed 设置的值。这是触发器的常见陷阱。

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