我很新的WPF - 誘惑的可能性,但越來越沮喪....我試圖讓它如此不同的TabControl標籤有不同根據他們被選中的時間,預告/背景顏色。我做的第一件事是創建一個名爲PlayerTabItem的新TabItem類,並給它一個Brush SelectedBackground屬性。這是一款音樂播放器應用程序,因此在此上下文中的「播放器」指的是其在此應用程序中的使用。 (我第一次創建SelectedBackground作爲一個簡單的屬性,然後再作爲一個依賴屬性,但是這似乎並沒有改變什麼,所以我省略了實現)WPF樣式TabControl TabItems自定義前景/背景顏色
class PlayerTabItem : TabItem
{
public Brush SelectedBackground { get; set; }
}
然後我用這是我的XAML ,並且它編譯好了(只要我在標記名稱的前面加上「local:」),並識別出我創建的新屬性。當然,財產沒有做任何事情。這是我卡住的地方。
<local:PlayerTabItem Header="Now Playing" SelectedBackground="Blue"/>
<local:PlayerTabItem Header="Collection" SelectedBackground="Purple"/>
<local:PlayerTabItem Header="Search" SelectedBackground="Green"/>
我試着在PlayerTabItem類中處理選擇事件以應用背景顏色,但這是一個死衚衕。 (覆蓋PlayerTabItem.OnSelected並設置顏色沒有任何影響 - 沒有錯誤地運行,但什麼都沒做。)然後,我試着用一個新的ControlTemplate和一個觸發器爲IsSelected = true添加一個Style,然後我開始越來越接近....它工作如果我只是硬編碼在Trigger.Setter顏色:
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Panel" Property="Background" Value="Purple" />
</Trigger>
但我真正想要的是綁定到PlayerTabItem的SelectedBackground顏色。我試過這個:
<Setter TargetName="Panel" Property="Background" Value="{Binding SelectedBackground}" />
但它沒有效果。我懷疑我需要一些有關綁定的Path參數,但我不知道是什麼。我嘗試過使用XAMLSpy來幫助我看看究竟發生了什麼(就元素的層次結構和可能的綁定路徑而言),但是我並沒有太多瞭解 - 除了當我嘗試通過XAMLSpy設置SelectedBackground屬性,它報告沒有找到SelectedBackground屬性。那怎麼可能? ....因爲我編譯和運行程序沒有錯誤。
我希望我想要做的是有道理的 - 我只是想在選中它們時更改選項卡控件上選定選項卡的背景顏色。
1)如果你想要綁定你自己的屬性,你是對的:你需要聲明一個依賴屬性。因此,把它放在一個控制系統中會更好,更合乎邏輯。 2)你想爲選擇不同的TabItem的背景設置顏色,對嗎? –
是的,你在我想要達到的目標中是正確的 –