2013-07-03 3 views
0

Я в настоящее время прототипирую простую программу графического интерфейса, где я столкнулся с тем, что, как я надеюсь, является быстрым решением с настройкой Tab Control. Мои вкладки в настоящее время настроены на «Голубой свет», когда они активны. У меня есть две вкладки, и один из них я хотел бы изменить на Blue Violet. Когда я ввожу код для цвета в области для вкладок, которые я хотел бы изменить, ничего не происходит.XAML WPF: Tab Control

Примечание для кода: Я пытаюсь изменить вкладки «Файл», «Параметры» и «Справка». Вы сможете увидеть в моем коде, что я пытался установить фон на «BlueViolet».

Сообщите мне, если вам нужна фотография.

Вот мой код:

<!---Main Class--> 
    <Window x:Class="Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="CartTools" Height="700" Width="1135" Name="Practice" FontSize="14" Opacity="1"> 
    <Window.Resources> 
     <!---Tab items for Cart customization--> 
     <Style TargetType="{x:Type TabItem}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type TabItem}"> 
         <Grid> 
          <Border 
        Name="Border" 
        Background="LightBlue" 
        BorderBrush="Black" 
        BorderThickness="1,1,1,1" 
        CornerRadius="30,6,0,0" > 
           <ContentPresenter x:Name="ContentSite" 
        VerticalAlignment="Center" 
        HorizontalAlignment="Center" 
        ContentSource="Header" 
        Margin="12,2,12,2"/> 
          </Border> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsSelected" Value="True"> 
           <Setter TargetName="Border" Property="Background" Value="LightSkyBlue" /> 
          </Trigger> 
          <Trigger Property="IsSelected" Value="False"> 
           <Setter TargetName="Border" Property="Background" Value="LightGray" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 
    <Grid Background="AliceBlue"> 
     <!---File, Options, Help tabs--> 
     <TabControl HorizontalAlignment="Left" Name="TabControl1" Width="215" Margin="0,0,0,286"> 
      <TabItem Header="File" Name="TabItem1" Background="BlueViolet"> 
       <Grid> 
        <Label Height="28" Margin="6,6,79,0" Name="Label1" VerticalAlignment="Top">New</Label> 
        <Button Height="23" HorizontalAlignment="Left" Margin="6,40,0,0" Name="Button1" VerticalAlignment="Top" Width="75">Button</Button> 
       </Grid> 
      </TabItem> 
      <TabItem Header="Options" Name="TabItem2" Background="BlueViolet"> 
       <Grid /> 
      </TabItem> 
      <TabItem Header="Help" Name="TabItem3" Background="BlueViolet"> 
       <Grid /> 
      </TabItem> 
     </TabControl> 
     <!---Cart Management Tabs--> 
     <TabControl Margin="251,0,12,12" Name="TabControl2"> 
      <TabItem Header="CartFunctions" Name="TabItem4"> 
       <Grid> 
        <RadioButton Height="16" Margin="6,6,0,0" Name="RadioButton1" VerticalAlignment="Top" HorizontalAlignment="Left" Width="120">RadioButton</RadioButton> 
        <RadioButton Height="16" HorizontalAlignment="Left" Margin="6,28,0,0" Name="RadioButton2" VerticalAlignment="Top" Width="120">RadioButton</RadioButton> 
        <CheckBox Height="16" HorizontalAlignment="Left" Margin="6,50,0,0" Name="CheckBox1" VerticalAlignment="Top" Width="120">CheckBox</CheckBox> 
       </Grid> 
      </TabItem> 
      <TabItem Header="Cart Configuration" Name="TabItem5"> 
       <Grid /> 
      </TabItem> 
      <TabItem Header="Cart I/O" Name="TabItem6"> 
       <Grid /> 
      </TabItem> 
      <TabItem Header="CMS" Name="TabItem7"> 
       <Grid /> 
      </TabItem> 
      <TabItem Header="Blocking Database" Name="TabItem8"> 
       <Grid></Grid> 
      </TabItem> 
     </TabControl> 
    </Grid> 
</Window> 

Спасибо!

+0

Но когда вы хотите увидеть BlueViolet? Если TabItem.IsSelected is True, вы устанавливаете Background на LightSkyBlue, и если это False, вы устанавливаете Background на LightGray. Нет шансов придумать BlueViolet. – LPL

ответ

2

Используйте TemplateBinding, чтобы получить локальное значение от Control в ControlTemplate.

<ControlTemplate TargetType="{x:Type TabItem}"> 
    <Border Background="{TemplateBinding Background}"> 
     ... 
    </Border> 
</ControlTemplate> 

Тогда вы увидите два различных фонов

<TabControl> 
    <TabItem Background="LightSkyBlue" /> 
    <TabItem Background="BlueViolet" /> 
</TabControl> 

Если вы хотите различные цвета только для IsSelected является истинным или ложным использование TemplateBinding в ControlTemplate.Triggers.

+0

Возможно, было бы «наименее сложным» создать эту привязку шаблона, а затем удалить «ложный» IsSelected триггер, чтобы по умолчанию TabItem был цветом фона, когда элемент табуляции не выбран. –

+0

Я - не знакомый с этим языком, так что медведь со мной. Где он говорит «Background =« LightBlue »« Я изменил его на «Background =» {TemplateBinding Background} ». Где именно я могу изменить ''? Кажется, у меня есть две вкладки, но они контролируются одним стилем. –

+0

У вас есть стиль TabItem с шаблоном, который используется для всех TabItems. На данный момент ваш фон установлен только в ControlTemplate.Triggers. Все остальные настройки для фона будут проигнорированы. Теперь это зависит от того, где и когда вы хотите увидеть BlueViolet. Если я не знаю, чего вы хотите, я не могу сказать, что вы должны делать. – LPL