【发布时间】:2020-01-17 22:42:30
【问题描述】:
我在 Visual Studio WPF 中有一个按钮,当我将鼠标悬停在它上面时,您可以看到它变亮了。
https://i.stack.imgur.com/l9kJh.png
我怎样才能删除它?我尝试查找解决方案,但我是初学者,所以我不明白如何实施给定的解决方案。
【问题讨论】:
标签: c# wpf visual-studio
我在 Visual Studio WPF 中有一个按钮,当我将鼠标悬停在它上面时,您可以看到它变亮了。
https://i.stack.imgur.com/l9kJh.png
我怎样才能删除它?我尝试查找解决方案,但我是初学者,所以我不明白如何实施给定的解决方案。
【问题讨论】:
标签: c# wpf visual-studio
需要进行设置,以便“IsMouseOver”触发器的背景颜色与默认颜色相同。
与此解决方案相同,只是保持颜色相同 Change color of Button when Mouse is over
<Button Width="50" Height="50" Content="Hi" Click="ButtonBase_OnClick" >
<Button.Style>
<Style TargetType="Button">
<Setter Property="Background" Value="LightGray"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="LightGray"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
【讨论】:
TemplateBinding 来维护样式等功能。例如,内容对齐属性应该反映模板化父级的设置。 ContentPresenter.HorizontalAlignment 应该绑定到模板化父级的 Button.HorizontalContentAlignment 属性。检查我的答案。
您必须覆盖ControlTemplate。当您覆盖它时,您必须重新实现由用户交互触发的行为(视觉状态),例如按下、鼠标悬停、禁用。
只实施您需要的触发器,留下您想避免的触发器。在您的情况下,不要实现鼠标悬停视觉状态触发器:
App.xaml
<ControlTemplate x:Key="NoMouseOverButtonTemplate"
TargetType="Button">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
</Border>
<!-- Add only required visual state triggers -->
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled"
Value="False">
<Setter Property="Background"
Value="{x:Static SystemColors.ControlLightBrush}" />
<Setter Property="Foreground"
Value="{x:Static SystemColors.GrayTextBrush}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
用法
<Button Template="{StaticResource NoMouseOverButtonTemplate}" />
要了解ControlTemplate 中包含的必需元素,这些元素对于模板化控件按预期执行是必需的,请检查Microsoft Docs: Control Styles and Templates 页面(在您的情况下为Button Styles and Templates 页面)并检查命名部分,因为某些控件需要某些元素带有特定名称以便被识别。
您还可以使用那里提供的默认模板作为设计或自定义控件的起点。
【讨论】:
ControlTemplate 并将其移动到例如 App.xaml 中。我将更新示例以显示它。