【发布时间】:2016-08-25 09:43:20
【问题描述】:
这很奇怪。 我创建了一个名为 Switch 的自定义控件。我还为 TextBlock 定义了一种样式。
<!-- Switch -->
<Style TargetType="{x:Type controls:Switch}">
<Setter Property="Margin"
Value="3,3,3,3" />
<Setter Property="MinWidth"
Value="40" />
<Setter Property="MinHeight"
Value="24" />
<Setter Property="On"
Value="ON" />
<Setter Property="Off"
Value="OFF" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls:Switch}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ContentPresenter Grid.Column="0"
Content="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Off}" />
<Border Grid.Column="1"
Background="{TemplateBinding Property=Background}"
BorderBrush="{TemplateBinding Property=BorderBrush}"
BorderThickness="{TemplateBinding Property=BorderThickness}"
CornerRadius="12,12,12,12"
HorizontalAlignment="Stretch"
VerticalAlignment="Center">
<Track x:Name="PART_Track"
Minimum="0"
Maximum="1"
Orientation="Horizontal"
Value="0">
<Track.Thumb>
<Thumb x:Name="PART_Thumb"
Style="{DynamicResource ResourceKey=SwitchThumb}" />
</Track.Thumb>
</Track>
</Border>
<ContentPresenter Grid.Column="2"
Content="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=On}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- Text Block -->
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin"
Value="3,3,3,3" />
<Setter Property="HorizontalAlignment"
Value="Left" />
<Setter Property="VerticalAlignment"
Value="Center" />
<Setter Property="TextAlignment"
Value="Left" />
<Setter Property="TextWrapping"
Value="Wrap" />
</Style>
当我将 Switch 实例(连同 TextBlock 样式)添加到简单窗口时,Switch 中使用的 ContentPresenter 将继承 TextBlock 样式。
但是当在 Visual Studio ToolWindow Extensibility 中使用 Switch 时,在 Switch 中使用的 ContentPresenter 不会继承 TextBlock 样式。
注意垂直对齐和边距,它们不是样式中设置的中心和 3,3,3,3。
知道为什么吗?
我尝试使用 snoop 来找出 ContentPresenter 中 TextBlock 的值,但它们与我定义的样式不符。
注意:我无法在所有 ContentPresenter 上设置 TextElement 附加属性,因为我有很多自定义控件,因此我更愿意为 TextBlock 设置样式。
【问题讨论】:
标签: c# wpf controltemplate visual-studio-extensions vs-extensibility