我很新的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的背景设置颜色,对吗? –
是的,你在我想要达到的目标中是正确的 –