마크 업 <ControlTemplate> </ControlTemplate>
새로운 ControlTemplate이 인스턴스가 기본 생성자 (new ControlTemplate()
)를 사용하여 만들 수 있음을 의미합니다. 생성자는 템플릿을 사용할 요소를 인식하지 못합니다. 이 TemplateBinding
초 동안 어떤 TargetControl
- 특정 속성을 사용하지 않기 때문에이 예에서
는
<ControlTemplate TargetType="local:TargetControl">
<Grid>
<Ellipse x:Name="PART_Target" Fill="Blue" />
<Grid>
</ControlTemplate>
템플릿은 TargetType없이 사용할 수 있습니다. TemplateBindings가 필요한 경우 TargetType도 설정해야합니다.
대부분의 경우 요소 템플릿은 요소 유형과 동일한 TargetType을가집니다.
하지만 예외적 인 경우가 있습니다. 예 : RadioButtons 및 CheckBoxes가 색상이있는 원처럼 보이기를 원합니다 - 선택하면 녹색, 선택하지 않으면 회색입니다.
의 RadioButton 및 확인란 ToggleButton을에서 파생, 그래서 ToggleButton을위한 템플릿을 생성하고 내 RadioButtons를 체크 박스에 적용
:
<StackPanel>
<StackPanel.Resources>
<ControlTemplate TargetType="{x:Type ToggleButton}" x:Key="Toggle">
<Border Name="btn" BorderBrush="Black" Background="Gainsboro"
Width="28" Height="28" CornerRadius="14" />
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background" TargetName="btn" Value="Lime" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</StackPanel.Resources>
<CheckBox Template="{StaticResource Toggle}" />
<RadioButton Template="{StaticResource Toggle}" />
<RadioButton Template="{StaticResource Toggle}" />
</StackPanel>
이 예는 ControlTemplate이 특정 요소에 연결하지 않고 리소스 사전에 정의 된 상황을 보여줍니다 , TargetType을 유추 할 수 없습니다.
TargetType이 확실하지 않거나 필요하지 않은 경우가 3 건 이상입니다. 따라서 개발자는 항상 콘크리트 유형을 제공해야합니다.
출처
2017-12-29 07:44:22
ASh