WPF - 仅在一个元素上使用控件模板

WPF - Using Control Template just on one element

我在 WPF 和 C# 中的第一步,但我没有让它工作...:(

我有一个应用程序,其中有两个网格 window。我必须更改第一个网格的样式,所以我开始阅读并使用 ControlTemplate 达到目的。 我的网格现在看起来如我所愿。但我只希望第一个网格看起来像这样。同一页上的第二个应该有另一种风格。

是否可以只在一个网格上绑定控件模板。也许通过名字或其他东西来识别?

我现在写的 ControlTemplate 代码 window.resources 看起来:

<Style TargetType="{x:Type TabItem}">
    <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <Grid>
                        <Border 
                            Name="Border"
                            Margin="0,0,0,0" 
                            Background="Black"
                            BorderBrush="Black" 
                            BorderThickness="0,2,0,0" 
                            CornerRadius="0,0,0,0" >
                            <ContentPresenter x:Name="ContentSite"
                                VerticalAlignment="Center"
                                HorizontalAlignment="Center"
                                ContentSource="Header"
                                Margin="0,0,0,20"
                                RecognizesAccessKey="True"/>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="Border" Property="BorderBrush" Value="#FF454E54" />
                            <Setter TargetName="Border" Property="Background"   Value="#FF0A3651" />
                        </Trigger>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter TargetName="Border" Property="BorderBrush" Value="White" />
                            <Setter TargetName="Border" Property="Background" Value="#FF454E54" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
</Style>

与其在 Window.Resources 下编写模板,不如在 Grid.Resources

下编写模板

您可以给 StyleControlTemplate 一个 x:Key ( <Style x:Key="key" TargetType="{x:Type TabItem}"> ) 并通过设置元素的 Style 将其应用于您想要的元素或者 Template 属性 像这样:

<TabItem Style="{StaticResource key}">

没有 x:KeyStyle 是隐含的,将应用于所有类型匹配 Style.

的指定 TargetType 的元素

试试这个。这只是直接设置 TabItem 的样式。

<TabItem> <!-- This is your TabItem control -->
    <TabItem.Style>
        <Style TargetType="{x:Type TabItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <!-- ControlTemplate here -->
                    </Controltemplate
                </Setter.Value>
            </Setter>
        </Style>
    </TabItem.Style>
</TabItem>