這很奇怪。 我創建了一個名爲Switch的自定義控件。我也爲TextBlock定義了一種風格。ContenPresenter TextBlock樣式在Visual Studio中不起作用ToolWindow擴展性
<!-- 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>
當我(連同TextBlock的樣式),以一個簡單的窗口添加開關的一個實例,在交換機中使用的ContentPresenter爲繼承的TextBlock風格。
但是當交換機的Visual Studio工具窗口擴展中使用,在交換機中使用的ContentPresenter不會繼承TextBlock的風格。
注意垂直對齊和邊距,它們不是中心,3,3,3,3在樣式中設置。
任何想法爲什麼?
我試過使用snoop來找出ContentPresenter中的TextBlock的值,它們不是根據我定義的樣式。
注:我無法在所有ContentPresenter上設置TextElement附加屬性,因爲我有很多自定義控件,因此寧願爲TextBlock設置樣式。
1.感謝您的回答。 「隱式文本框樣式沒有在工具窗口中使用」是什麼意思? 2.就像我在我的文章中提到的,我也在其他控件中使用該文本塊樣式。我不想在任何地方設置對齊和保證金。 – sudarsanyes
回答#1:你說的「Visual Studio ToolWindow Extensibility」究竟意味着什麼,我似乎並沒有真正明白這將是什麼......對於#2我確實在你的問題中讀到你不想這麼做。但說實話,你真的有多少款式,這會很麻煩。此外,在你的風格中定義它是一種方式。只需查看[CheckBox的默認樣式](https://msdn.microsoft.com/en-us/library/ms752319(v = vs.110).aspx),請參閱「CheckBox的默認樣式」中的「Margin」和「VerticalAlignment」 'ContentPresenter'? –
此外,我不確定您是否將您的DependencyProperties On和Off設置爲'object'或'string'類型。如果是「對象」,例如允許一個圖標,然後您將不得不在圖標中指定邊距,否則圖標將粘貼到頂部,並且不會有默認的邊距。所以真正的邊緣和垂直對齊屬於交換機而不是交換機的內容 –