이상합니다. Switch라는 사용자 지정 컨트롤을 만들었습니다. 또한 TextBlock 스타일을 정의했습니다. ContenPresenter Visual Studio에서 TextBlock 스타일이 작동하지 않습니다. 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의 스타일을 상속합니다. 그러나 스위치는 비주얼 스튜디오 ToolWindow 확장 내에서 사용하는 경우, 스위치 내에서 사용 된 ContentPresenter는 TextBlock의 스타일을 상속하지 않습니다.수직 정렬 및 여백에 유의하십시오.이 문자는 가운데 맞춤이 아니며 스타일에 설정된대로 3,3,3,3입니다.
왜 그런가?
스눕을 사용하여 ContentPresenter 내의 TextBlock 값을 알아 냈습니다. 정의한 스타일에 맞지 않습니다.
참고 : 많은 사용자 지정 컨트롤이 있으므로 TextBlock에 대한 스타일 설정 대신 TextElement 연결 속성을 모든 ContentPresenter에 설정할 수 없습니다.
1. 답변 해 주셔서 감사합니다. "암시 적 TextBox 스타일이 도구 창에서 사용되고 있지 않다"는 것은 무엇을 의미합니까? 2. 내 게시물에서 언급 한 것처럼 다른 컨트롤에서도 해당 텍스트 블록 스타일을 사용하고 있습니다. 어디에서나 정렬과 여백을 설정하고 싶지 않습니다. – sudarsanyes
# 1 : 정확히 "Visual Studio ToolWindow Extensibility"로 무엇을 의미합니까? 나는 이것이 실제로 어디로 갈지 모르는 것 같습니다. # 2 당신의 질문에 당신이 그것을하고 싶지 않다는 것을 읽었습니다. . 그러나 솔직히 말해서, 얼마나 많은 스타일이 정말로 귀찮습니다. 또한, 당신의 스타일로 그것을 정의하는 것은 갈 길입니다. [CheckBox의 기본 스타일] (https://msdn.microsoft.com/en-us/library/ms752319(v=vs.110) .aspx)을 살펴보고, '여백'과 'VerticalAlignment'를 참조하십시오. 'ContentPresenter'? –
또한 DependencyProperties를 On 및 Off로 설정하는 것이'object' 또는'string' 유형으로되어 있는지 확신 할 수 없습니다. 예를 들어 아이콘을 허용하는'object'이고 아이콘에 여백을 지정해야한다면, 아이콘이 맨 위에 붙어서 트랙에 대한 기본 마진을 가지지 않을 것입니다. 그래서 정말로 마진과 수직 정렬은 스위치의 내용보다는 스위치에 속합니다. –