如何将MahApps样式应用于我自己的WPF控件?

时间:2015-12-01 17:19:18

标签: c# wpf mahapps.metro

通常,当我将TabItem的Header设置为某个字符串时,MahApps样式将应用于TabItem标题。

但是,我以编程方式创建了自定义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;

1 个答案:

答案 0 :(得分: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>

使用样式的好处是,你可以做/改变你想要的东西......

希望这有帮助!