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">
我从来没有遇到过任何问题。
我正在尝试在 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">
我从来没有遇到过任何问题。