有人可以幫我解決這個問題嗎?我在WPF下面的模板設置:WPF:訪問ContentPresenter中的元素?
<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,它包含了所有的標籤。
有人可以幫助我找出如何訪問邊框並更改其背景顏色,或者可能引導我在任何方向可能會幫助我完成此任務?
任何幫助非常感謝!
約翰,非常感謝你!背景顏色現在保持;但是,仍然有一個小錯誤。由於我所有的標籤共享相同的上下文菜單,所以當它打開所有標籤上的背景顏色變化而不是我點擊的標籤時。有沒有一種方法來識別源元素,還是應該爲每個標籤創建單獨的上下文菜單? – 2010-07-12 13:33:41
Nevermind,John,我能夠使用代碼來完成此操作,以確定何時打開和關閉上下文菜單並更改發件人的背景,就像您所說的那樣!非常感謝你! – 2010-07-12 18:59:07