2011-05-06 40 views
1

我怎样才能在TabItem的变色头的更改标题背景在Silverlight

tabItem1.Background = new SolidColorBrush(Colors.Red);//This is not changing background 
tabItem1.BorderBrush = new SolidColorBrush(Colors.Red);//This change header border color 

回答

1

使用HeaderTemplates选项卡控件,然后改变他们在后面的代码如:

<DataTemplate x:Key="InvalidTabHeader"> 
     <Border BorderBrush="Red" BorderThickness="1"> 
      <StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Left"> 
       <TextBlock Text="{Binding}"></TextBlock> 
      </StackPanel> 
     </Border> 
    </DataTemplate> 

    <DataTemplate x:Key="ValidTabHeader"> 
     <StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Left"> 
      <TextBlock Text="{Binding}"></TextBlock> 
     </StackPanel> 
    </DataTemplate> 

和然后在标签项XAML ...

<sdk:TabItem Header="My Tab" x:Name="MyTab" HeaderTemplate="{StaticResource ValidTabHeader}"> 

然后,你可以在后面的视图代码做这种东西:

var invalidTabStyle = Resources [INVALID_TABITEM_HEADER_TEMPLATE] as DataTemplate;

var validTabStyle = Resources [VALID_TABITEM_HEADER_TEMPLATE] as DataTemplate;

myTabItem.HeaderTemplate = errorCnt == 0? validTabStyle:invalidTabStyle;

+0

我已经跟随你的解决方案,它似乎是我想要的问题是,它显示框,就像在该选项卡标题区域,而不是所有标题,它显示broder在中 – 2011-05-06 21:17:06

0

不幸的是,它很常见地发现即使是一些相当简单的功能也需要您自己对现有控件进行模板化(或者如Myles建议您仅使用自己的默认UI覆盖)。

这种情况下的问题是,现有的TabItem模板假定选定的选项卡将具有白色(#FFFFFFFF)背景,并将其硬编码到模板中(这与许多默认模板相当常见)。

您应该注意到,您的背景值将影响未选中的选项卡,但不会显示为固定的Red,因为是粉色渐变。

我的建议是咬住项目符号并复制TabItem的默认模板,然后按照您认为合适的方式进行操作。这种方法为您提供更多的灵活性,而无需添加额外的不必要的UI元素