2015-03-27 3 views
0

У меня есть TabControl, и я применяю к нему стиль, чтобы заголовок TabItems не имел фона и границы.Как стилизовать TabItem TabControl без стилизации их ContentPresenters?

Моя проблема заключается в том, что если я добавлю триггер для выбранного, соответствующая панель также будет оформлена. Поэтому, если я решит установить выделенный план TabItem на красный, текстовые блоки панели также станут красными.

Удовлетворительный факт: он не применяется к этикеткам. Я совсем потерян.

Вот код XAML, который тестирует довольно быстро в Kaxaml:

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<Grid> 
    <TabControl> 
     <TabControl.Resources> 
      <Style TargetType="{x:Type TabItem}"> 
       <Setter Property="Effect"> 
        <Setter.Value> 
         <DropShadowEffect ShadowDepth="0" Color="Black" BlurRadius="3"/> 
        </Setter.Value> 
       </Setter> 
       <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/> 

       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type TabItem}"> 
          <Grid> 
           <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="12,2,12,2" RecognizesAccessKey="True"/> 
          </Grid> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsSelected" Value="True"> 
            <Setter Property="Panel.ZIndex" Value="100" /> 
            <Setter Property="FontWeight" Value="Bold"/> 
            <Setter Property="Foreground" Value="DarkOrange"/> 
            <Setter Property="Effect"> 
             <Setter.Value> 
              <DropShadowEffect ShadowDepth="0" BlurRadius="4" Color="Blue"/> 
             </Setter.Value> 
            </Setter> 
           </Trigger> 
           <Trigger Property="IsEnabled" Value="False"> 
            <Setter Property="Foreground" Value="#FF553333" /> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 

      </Style> 
     </TabControl.Resources> 
     <TabItem Header="TAB1"> 
      <TextBlock Text="WHY AM I GETTING STYLED D:"/> 
     </TabItem> 
     <TabItem Header="TAB2"> 
      <TextBlock Text="ME TOO D:"/> 
     </TabItem> 
    </TabControl> 
    </Grid> 
</Window> 

Редактировать после ответа (в случае, если кто заинтересован в этом о так довольно TabControl ...):

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <TabControl> 
     <TabControl.Resources> 
      <Style TargetType="{x:Type TabItem}"> 
       <Setter Property="Effect"> 
        <Setter.Value> 
         <DropShadowEffect ShadowDepth="0" Color="Black" BlurRadius="3"/> 
        </Setter.Value> 
       </Setter> 
       <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/> 

       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type TabItem}"> 
          <Border BorderBrush="Transparent" Background="Transparent"> 
            <ContentPresenter x:Name="TabItemContent" VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="12,2,12,2" RecognizesAccessKey="True"/>          
          </Border> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsSelected" Value="True"> 
            <Setter Property="Panel.ZIndex" Value="100" TargetName="TabItemContent"/> 
            <Setter Property="TextElement.FontWeight" Value="Bold" TargetName="TabItemContent"/> 
            <Setter Property="TextElement.Foreground" Value="DarkOrange" TargetName="TabItemContent"/> 
            <Setter Property="Effect" TargetName="TabItemContent"> 
             <Setter.Value> 
              <DropShadowEffect ShadowDepth="0" BlurRadius="4" Color="Blue"/> 
             </Setter.Value> 
            </Setter> 
           </Trigger> 
           <Trigger Property="IsEnabled" Value="False"> 
            <Setter Property="TextElement.Foreground" Value="Black" /> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 

      </Style> 
     </TabControl.Resources> 
     <TabItem Header="TAB1"> 
      <StackPanel> 
      <TextBlock Text="TextBlock"/> 
      <Label Content="Label"/> 
      </StackPanel> 

     </TabItem> 
     <TabItem Header="TAB2"> 
      <StackPanel> 
      <TextBlock Text="TextBlock too"/> 
      <Label Content="Another Label"/> 
      </StackPanel> 
     </TabItem> 
    </TabControl> 
</Grid> 
</Window> 

ответ

1

Я внесла изменения в ваш код! Прекрасно! проверить это

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <TabControl> 
      <TabControl.Resources> 
       <Style TargetType="{x:Type TabItem}"> 
        <Setter Property="Effect"> 
         <Setter.Value> 
          <DropShadowEffect ShadowDepth="0" Color="Black" BlurRadius="3"/> 
         </Setter.Value> 
        </Setter> 
        <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/> 

        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type TabItem}"> 
           <Grid>          
             <ContentPresenter x:Name="TabItemContent" VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="12,2,12,2" RecognizesAccessKey="True"/>          
           </Grid> 
           <ControlTemplate.Triggers> 
            <Trigger Property="IsSelected" Value="True"> 
             <Setter Property="Panel.ZIndex" Value="100" /> 
             <Setter Property="FontWeight" Value="Bold"/> 
             <Setter Property="TextElement.Foreground" TargetName="TabItemContent" Value="DarkOrange"/> 
             <Setter Property="Effect"> 
              <Setter.Value> 
               <DropShadowEffect ShadowDepth="0" BlurRadius="4" Color="Blue"/> 
              </Setter.Value> 
             </Setter> 
            </Trigger> 
            <Trigger Property="IsEnabled" Value="False"> 
             <Setter Property="TextElement.Foreground" Value="Black" /> 
            </Trigger> 
           </ControlTemplate.Triggers> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 

       </Style> 
      </TabControl.Resources> 
      <TabItem Header="TAB1"> 
       <TextBlock Text="Now, I am perfect:"/> 
      </TabItem> 
      <TabItem Header="TAB2"> 
       <TextBlock Text="ME TOO D:"/> 
      </TabItem> 
     </TabControl> 
    </Grid> 
</Window> 
+0

Так что я должен добавить Имя_целевого_объекта в каждом инкубаторе есть ... любопытное разочарование от WPF! Спасибо за помощь – Kilazur

0

Только в случае, если вы хотите сохранить ContentPresenter попробовать эту небольшую модификацию:

  <Style TargetType="{x:Type TabItem}"> 
       <Setter Property="Effect"> 
        <Setter.Value> 
         <DropShadowEffect ShadowDepth="0" Color="Black" BlurRadius="3"/> 
        </Setter.Value> 
       </Setter> 
       <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/> 

       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type TabItem}"> 
          <Grid> 
           <ContentPresenter x:Name="MyTarget" VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="12,2,12,2" RecognizesAccessKey="True"/> 
          </Grid> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsSelected" Value="True"> 
            <Setter Property="Panel.ZIndex" Value="100" /> 
            <Setter Property="FontWeight" Value="Bold"/> 
            <Setter Property="TextElement.Foreground" Value="DarkOrange" TargetName="MyTarget"/> 
            <Setter Property="Effect"> 
             <Setter.Value> 
              <DropShadowEffect ShadowDepth="0" BlurRadius="4" Color="Blue"/> 
             </Setter.Value> 
            </Setter> 
           </Trigger> 
           <Trigger Property="IsEnabled" Value="False"> 
            <Setter Property="TextElement.Foreground" Value="#FF553333" TargetName="MyTarget"/> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 

      </Style>