wpf在xaml触发器中获取对象类型

时间:2013-05-02 15:02:17

标签: wpf triggers datatrigger

我经常使用依赖于本地类类型的触发器。常见的情况是一般控件样式,它们具有依赖于类的ContentControls。 情形:

1)实现列表框'MyUserControl'

的UserControl

2)一个大型列表框样式,适用于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获取本地类型,而不使用此属性?

1 个答案:

答案 0 :(得分:1)

我会使用DataTemplate.DataType属性并让WPF执行工作。没有触发器,没有额外的DataType属性。

<DataTemplate DataType="{x:Type local:MyListbox1}">
    <Label...
</DataTemplate>