Wpf 数据触发器集模板

Wpf 数据触发器集模板,wpf,templates,styles,datatrigger,Wpf,Templates,Styles,Datatrigger,我必须设置模板,我使用了DataTrigger,但它不起作用 我的代码: <Style TargetType="{x:Type local:My_type}"> <Style.Triggers> <DataTrigger Binding="{Binding GUID, RelativeSource={RelativeSource AncestorType={x:Type local:MyClassViewControl}}}"

我必须设置模板,我使用了DataTrigger,但它不起作用

我的代码:

<Style TargetType="{x:Type local:My_type}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding GUID, RelativeSource={RelativeSource AncestorType={x:Type local:MyClassViewControl}}}" 
                     Value="id1">
                <Setter Property="Template" Value="{StaticResource FirstTemplate}" />
        </DataTrigger>
        <DataTrigger Binding="{Binding GUID, 
                RelativeSource={RelativeSource AncestorType={x:Type local:MyClassViewControl}}}" 
                     Value="id2">
            <Setter Property="Template" Value="{StaticResource SecondTemplate}" />
        </DataTrigger>
    </Style.Triggers>
</Style>

这就是一个例子。 为什么我的代码不起作用? GUID没有错(“id1”或“id2”)

我认为

"{Binding GUID, RelativeSource={RelativeSource 
      AncestorType={x:Type local:MyClassViewControl}}}"
应该是

"{Binding GUID, RelativeSource={RelativeSource FindAncestor, 
      AncestorType={x:Type local:MyClassViewControl}}}"
我找到了解决办法: 在C#中创建模板选择器:

在我的XAML文件中:

<local:GUIDTemplateSelector x:Key="TheGUIDControlTemplateSelector"/>

<Style TargetType="{x:Type My_type}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:My_type}">
                <ContentControl ContentTemplateSelector="{StaticResource TheGUIDTemplateSelector}" Content="{Binding GUID,RelativeSource={RelativeSource AncestorType={x:Type local:My_type}}}"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


确保正在访问的MyClassViewControl的DataContext设置为具有GUID属性的内容。否则,我认为这段代码看起来还可以。绑定是正确的!MyClassViewControl具有属性GUID。DataContext似乎正常运行运行此操作时,输出窗口中是否存在绑定异常?
MyClassViewControl
是否有名为
GUID
的属性,或者是否有名为
DataContext
的属性?是否没有绑定异常。是的,在MyClassViewControls中有属性GUID。biniding是可以的!我认为当DataTrigger测试其值时,GUID不会初始化。如何在XAML中等待其初始化?
<local:GUIDTemplateSelector x:Key="TheGUIDControlTemplateSelector"/>

<Style TargetType="{x:Type My_type}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:My_type}">
                <ContentControl ContentTemplateSelector="{StaticResource TheGUIDTemplateSelector}" Content="{Binding GUID,RelativeSource={RelativeSource AncestorType={x:Type local:My_type}}}"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>