誰かがこれで私を助けてくれますか? 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>
プログラムが読み込まれると、ナビゲーション メニューとして機能するラベルのリストが自動的に作成されます。上記からわかるように、ラベルの 1 つにマウスを合わせると、背景色が変更されます。これに関する唯一の問題は、ラベルにコンテキスト メニューが適用されていることです。右クリックして表示すると、ラベルの背景が MouseOver の色ではなく元の色に戻ります。
約 1 時間ほど Google で検索しましたが、マウスの右ボタンが押されたかどうかを確認するトリガー プロパティが見つからないようです。コードでこれを達成できるのではないかと考えています。
次のコードを試しましたが、うまくいきません。
// 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"));
}
}
また、Label の親要素を Border として取得しようとしましたが、テンプレートを介して設定されているため、Label の親は実際にはすべてのラベルを含む StackPanel であるようです。
誰かが境界線にアクセスして背景色を変更する方法を理解するのを手伝ってくれますか、それともこれを達成するのに役立つ方向に私を案内してくれますか?
どんな助けでも大歓迎です!