2015-12-01 3 views
0

Обычно, когда я устанавливаю заголовок TabItem на некоторую строку, стили MahApps применяются к заголовку TabItem.Как применить стиль MahApps к моему собственному элементу управления WPF?

Однако я программно создал пользовательский TabItem, это заголовок не является строкой, а StackPanel, и все стили из MahApps теряются. Как я могу повторно применить стили MahApps к своему пользовательскому заголовку TabItem?

TabItem tabItem = new TabItem(); 

StackPanel tabItemHeader = new StackPanel(); 
tabItemHeader.Orientation = Orientation.Horizontal; 
var tabTitle = new Label() {Content = "Userstory"}; 
var closeButton = new Button() {Content = "x"}; 
tabItemHeader.Children.Add(tabTitle); 
tabItemHeader.Children.Add(closeButton); 

tabItem.Header = headerStackPanel; 
+0

Удалите все это и используйте надлежащий XAML. –

ответ

1

Вы должны сделать это с помощью возможностей XAML и стилей. Вот короткий пример, который вы можете сделать:

Поместите этот стиль в Window ресурсов или App ресурсов.

<Style x:Key="CustomTabItemStyle" TargetType="{x:Type TabItem}" BasedOn="{StaticResource MetroTabItem}"> 
    <Setter Property="HeaderTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <ContentPresenter Content="{TemplateBinding Content}" /> 
        <Button Margin="2" VerticalAlignment="Top" Width="{Binding RelativeSource={RelativeSource Self}, Path=ActualHeight}" Content="x" /> 
       </StackPanel> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

и использовать его в ваших TabItems

<TabItem Header="Userstory" Style="{StaticResource CustomTabItemStyle}"> 
    <!-- your tab content --> 
</TabItem> 

Преимущество использования стилей в том, что вы можете сделать/изменить то, что вы хотите ...

Надеются, что это помогает!

Смежные вопросы