0

SetTemplate を使用する必要があり、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")

4

2 に答える 2

0

私は解決策を見つけました:C#でTemplateSelectorを作成します:

public class GUIDTemplateSelector : DataTemplateSelector
{
    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        FrameworkElement element = container as FrameworkElement;
        if (item != null && element != null)
        {
            string GUID = item as string;
            if (GUID != null)
            {
                if (GUID.Equals("id1"))
                {
                    return element.FindResource("FirstTemplate") as DataTemplate;
                }
                if (GUID.Equals("id2"))
                {
                    return element.FindResource("SecondTemplate") as DataTemplate;
                }
            }
        }
        return null;
    }
}

そして私の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>
于 2012-06-18T09:03:45.417 に答える
0

こう思う

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

する必要があります

"{Binding GUID, RelativeSource={RelativeSource FindAncestor, 
      AncestorType={x:Type local:MyClassViewControl}}}"
于 2012-06-15T14:25:58.813 に答える