有人可以帮我解决这个问题吗?我在 WPF 中有以下模板设置:
<Style TargetType="{x:Type Label}" x:Key="NavLink">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate x:Name="NavLinkControlTemplate" TargetType="{x:Type Label}">
<Border x:Name="NavLinkBorder">
<ContentPresenter x:Name="NavLinkContent" Margin="4,4,4,4" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="NavLinkBorder" Property="Background" Value="#CCCCCC" />
<Setter Property="Cursor" Value="Hand" />
</Trigger>
<Trigger Property="IsMouseOver" Value="False">
<Setter TargetName="NavLinkBorder" Property="Background" Value="#EAEAEA" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
当我的程序加载时,它会自动创建一个标签列表作为导航菜单。从上面可以看出,当鼠标悬停在其中一个标签上时,背景颜色会发生变化。唯一的问题是我还有一个应用于标签的上下文菜单,当我右键单击以将其调出时,标签背景会恢复其原始颜色,而不是保持 MouseOver 颜色。
我用谷歌搜索了大约一个小时左右,似乎找不到一个触发器属性来检查鼠标右键是否被按下,所以我假设没有。我在想也许我可以通过代码来实现这一点。
我已经尝试了以下代码,但我没有任何运气:
// this event is being added to each label at runtime...
tempLabel.MouseRightButtonUp += new MouseButtonEventHandler(NavLink_RightClicked);
// this is the method that the right-click calls...
private void NavLink_RightClicked(object sender, EventArgs e)
{
if (sender is Label)
{
currentContextLink = sender as Label;
// the below line won't work because the ControlTemplate seems to be overwriting it...
currentContextLink.Background = new SolidColorBrush(appFunctions.HexToColor("#FF0000"));
}
}
我也尝试将标签的父元素作为边框,但似乎由于它是通过模板设置的,标签的父元素实际上是我拥有的包含所有标签的 StackPanel。
有人可以帮我弄清楚如何访问边框并更改其背景颜色,或者指导我朝任何可能帮助我完成此任务的方向吗?
任何帮助是极大的赞赏!