我经常使用依赖于本地类类型的触发器。常见的情况是一般控件样式,它们具有依赖于类的ContentControls。 情形:
1)实现列表框'MyUserControl'
的UserControl2)一个大型列表框样式,适用于Usercontrol中的Listbox控件。该样式最初为空ContentControl(用Label / StackPanel填充)
<ContentControl Name="SpecificLabel"></ContentControl>
3)为每个特定的派生类
定义了Contentcontrol<ControlTemplate x:Key="listbox1Template">
<Label...
</ControlTemplate>
<ControlTemplate x:Key="listbox2Template">
<StackPanel...
</ControlTemplate>
4)根据MyListboxControl的派生类,contentcontrol的模板由Datatriggers选择:
<DataTrigger Binding="{Binding ElementName=MyUserControl, Path=DataType}" Value="{x:Type local:MyListbox1}">
<Setter TargetName="SpecificLabel" Property="Template" Value="{StaticResource listbox1template}"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=MyUserControl, Path=DataType}" Value="{x:Type local:MyListbox2}">
<Setter TargetName="SpecificLabel" Property="Template" Value="{StaticResource listbox2template}"/>
</DataTrigger>
因此,基类提供了DataType属性:
public Type DataType
{
get
{
return this.GetType();
}
}
这看起来必须有更简单的方法。是否可以仅使用XAML获取本地类型,而不使用此属性?
答案 0 :(得分:1)
我会使用DataTemplate.DataType属性并让WPF执行工作。没有触发器,没有额外的DataType属性。
<DataTemplate DataType="{x:Type local:MyListbox1}">
<Label...
</DataTemplate>