WPF控制模板:为什么在其明显的位置需要TargetType?
我对wpf中xaml过于冗长感到有点困惑。例如,在定义控件模板时,仍然必须将目标类型指定为控件本身。是否需要指定TargetType?因为我正在定义TargetControl的模板元素,所以在未指定时,它不是默认为TargetControl吗WPF控制模板:为什么在其明显的位置需要TargetType?,wpf,wpf-controls,Wpf,Wpf Controls,我对wpf中xaml过于冗长感到有点困惑。例如,在定义控件模板时,仍然必须将目标类型指定为控件本身。是否需要指定TargetType?因为我正在定义TargetControl的模板元素,所以在未指定时,它不是默认为TargetControl吗 <local:TargetControl Width="100" Height="100"> <local:TargetControl.Template> <ControlTemplate TargetType="l
<local:TargetControl Width="100" Height="100">
<local:TargetControl.Template>
<ControlTemplate TargetType="local:TargetControl">
<Grid>
<Ellipse x:Name="PART_Target" Fill="Blue" />
<Grid>
</ControlTemplate>
</local:TargetControl.Template>
</local:TargetControl>
标记
表示使用默认构造函数创建新的ControlTemplate实例(new ControlTemplate()
)。构造函数不知道哪个元素将使用模板
在这个例子中
<ControlTemplate TargetType="local:TargetControl">
<Grid>
<Ellipse x:Name="PART_Target" Fill="Blue" />
<Grid>
</ControlTemplate>
此示例还演示了在资源字典中定义ControlTemplate而不连接特定元素的情况,因此无法推断TargetType
因此,至少有3种情况下,TargetType不确定或不需要。所以让开发人员始终提供具体的类型
<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>