【发布时间】:2017-12-01 20:36:14
【问题描述】:
我正在尝试在 WPF 中创建一个井字游戏,并使用 3X3 网格中的按钮来实现相同的目的。我想覆盖默认按钮样式,例如,将鼠标悬停在按钮上时,背景颜色不应更改。但是在创建静态资源之后,按钮单击事件不再被触发。这是我的代码:
按钮(该按钮不触发点击事件):
<Button Name="Button1X1" Style="{StaticResource TicTacToeButtonStyle}" Grid.Row="0" Grid.Column="0" Content="" BorderThickness="0, 0, 2.5, 2.5" Click="Button_Click"/>
按钮(该按钮触发点击事件):
<Button Name="Button1X2" Background="Transparent" Grid.Row="0" Grid.Column="1" Content="" Click="Button_Click"/>
资源:
<Window.Resources>
<Style x:Key="TicTacToeButtonStyle" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Transparent"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
另外,Button1X1 中设置的边框粗细属性也不会反映。
【问题讨论】:
-
你的目标是什么?您想要一个始终不可见的隐形按钮吗?当鼠标不在它上面时,您希望它可见吗?模板是创建按钮的视觉元素的东西。现在,它什么也没有创造。当您替换模板时,您已经替换了显示边框的东西。您必须将其替换为 的东西。
-
我希望它始终是一个不可见的按钮,即使在鼠标悬停时也是如此。
-
当你说你想让它不可见时,你的意思是你还想看到它周围的边框吗?
-
因为控件模板内部没有视觉元素。请改用
Style.Triggers。查看示例。 -
如果您想要内部没有任何内容的按钮,请使用
Border作为ControlTemplate根,并将Background属性设置为Transparent。