Я довольно новичок в WPF - мучительный от возможностей, но разочарование .... Я пытаюсь сделать так, чтобы разные вкладки TabControl отличались друг от друга цвета переднего/заднего фона в зависимости от того, когда они выбраны. Первое, что я сделал, это создать новый класс TabItem под названием PlayerTabItem и присвоить ему свойство 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 для того, чтобы применить цвет фона, но это был тупик. (Overriding PlayerTabItem.OnSelected и настройка цвета там не имела эффекта - бежал без ошибок, но ничего не делал.) Затем я попробовал добавить стиль с новым ControlTemplate и Trigger for IsSelected = true, и я начал приближаться ... это работал, если я просто жестко закодирован цвет в Trigger.Setter:
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Panel" Property="Background" Value="Purple" />
</Trigger>
Но что я действительно хочу, чтобы связываться с SelectedBackground цвета PlayerTabItem в. Я пробовал это:
<Setter TargetName="Panel" Property="Background" Value="{Binding SelectedBackground}" />
Но это не имело никакого эффекта. Я подозревал, что мне нужен какой-то аргумент Path о привязке, но я понятия не имел, что. Я попробовал использовать XAMLSpy, чтобы помочь мне понять, что происходит (насколько иерархия элементов и возможный путь привязки), но я не очень далеко от этого, кроме тех случаев, когда я пытался установить свойство SelectedBackground через XAMLSpy , он сообщил, что свойство SelectedBackground не найдено. Как это могло быть? .... поскольку я скомпилировал и запустил программу без ошибок.
Я надеюсь, что то, что я пытаюсь сделать, имеет смысл - я просто хочу изменить цвет фона выбранных вкладок в элементе управления вкладкой, когда они будут выбраны.
1) Если вы хотите сделать привязку к своему собственному имуществу, вы вернетесь: вам нужно объявить свойство зависимости. Так что это намного лучше и логичнее иметь его в контроле. 2) Вы хотите иметь цвет для фона TabItem, который отличается, когда он выбран, правильно? –
да, вы правы в том, чего я пытаюсь достичь –