0

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

1) 实现列表框“MyUserControl”的用户控件

2) 大列表框样式,适用于用户控件内的列表框控件。该样式有一个最初为空的 ContentControl(填充有标签 / StackPanel)

<ContentControl Name="SpecificLabel"></ContentControl>

3)为每个特定的派生类定义了Contentcontrols

<ControlTemplate x:Key="listbox1Template">
    <Label...
</ControlTemplate>

<ControlTemplate x:Key="listbox2Template">
    <StackPanel...
</ControlTemplate>

4)根据MyListboxControl的派生类,Datatriggers选择contentcontrol的模板:

<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 中获取本地类型,而不使用此属性?

4

1 回答 1

1

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

<DataTemplate DataType="{x:Type local:MyListbox1}">
    <Label...
</DataTemplate>
于 2013-05-02T15:45:07.657 回答