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
下编写模板
您可以给 Style
或 ControlTemplate
一个 x:Key
( <Style x:Key="key" TargetType="{x:Type TabItem}">
) 并通过设置元素的 Style
将其应用于您想要的元素或者 Template
属性 像这样:
<TabItem Style="{StaticResource key}">
没有 x:Key
的 Style
是隐含的,将应用于所有类型匹配 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>
我在 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
下编写模板您可以给 Style
或 ControlTemplate
一个 x:Key
( <Style x:Key="key" TargetType="{x:Type TabItem}">
) 并通过设置元素的 Style
将其应用于您想要的元素或者 Template
属性 像这样:
<TabItem Style="{StaticResource key}">
没有 x:Key
的 Style
是隐含的,将应用于所有类型匹配 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>