如何自定义MahApps.Metro中MetroWindow标题栏图标 实现默认同悬停效果
解决MetroWindow标题栏图标默认变暗的问题
在WPF中使用MahApps.Metro组件时,MetroWindow标题栏内的窗口命令按钮默认会以低透明度的暗色状态显示,只有鼠标悬停时才会恢复清晰效果。实现默认状态和悬停显示完全一致的效果,不需要重写整个控件模板,通过内置配置即可快速完成。
最快实现方式(推荐)
WindowCommands组件本身就提供了控制按钮显示透明度的内置属性,默认变暗的效果正是来自这两个属性的默认值:
NormalButtonOpacity:默认值0.3,控制无鼠标悬停、窗口非激活状态下的按钮(含内部图标、文本)不透明度MouseOverButtonOpacity:默认值1,控制鼠标悬停时的按钮不透明度,也就是期望达到的显示效果
只需要给左右两个窗口命令区域的WindowCommands节点添加NormalButtonOpacity="1"配置,即可让按钮常态下的不透明度和悬停态完全一致,同时还能避免窗口失去焦点时按钮自动变暗。
修改后的关键XAML片段:
<mah:MetroWindow.LeftWindowCommands> <mah:WindowCommands NormalButtonOpacity="1"> <Button x:Name="btnTest" Click="btnTest_Click" ToolTip="Open up the GitHub site"> <iconPacks:PackIconModern Width="22" Height="22" Kind="SocialGithubOctocat" /> </Button> </mah:WindowCommands> </mah:MetroWindow.LeftWindowCommands> <mah:MetroWindow.RightWindowCommands> <mah:WindowCommands NormalButtonOpacity="1"> <Button x:Name="btnTest1" Click="btnTest1_Click" Content="Deploy CupCakes"> <Button.ContentTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <iconPacks:PackIconModern Width="22" Height="22" VerticalAlignment="Center" Kind="FoodCupcake" /> <TextBlock Margin="4 0 0 0" VerticalAlignment="Center" Text="{Binding}" /> </StackPanel> </DataTemplate> </Button.ContentTemplate> </Button> </mah:WindowCommands> </mah:MetroWindow.RightWindowCommands>
旧版本兼容方案
如果使用的MahApps版本较老,没有暴露NormalButtonOpacity属性,可以在窗口资源区自定义按钮样式,强制固定按钮不透明度,覆盖内置的状态切换效果。如果不希望影响窗口其他区域的按钮,可以给样式设置x:Key,再手动给每个窗口命令区的按钮指定样式:
<mah:MetroWindow.Resources> <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"> <Setter Property="Opacity" Value="1" /> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Opacity" Value="1" /> </Trigger> </Style.Triggers> </Style> </mah:MetroWindow.Resources>
注意:调整不透明度后如果仍有轻微颜色差异,可给按钮设置
Foreground="{DynamicResource MahApps.Brushes.ThemeForeground}",确保文字、图标的颜色和悬停态完全统一。
内容的提问来源于stack exchange,提问作者nam
相关产品推荐
相关产品推荐

