从.xaml文件中的触发器更改ControlTemplate

时间:2014-04-28 21:04:51

标签: wpf controltemplate datatrigger

我用CRK键定义的控制模板很少,它们通过触发器

应用
<ControlTemplate
    x:Key="{ComponentResourceKey ResourceId=SubmenuItemTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}"
    TargetType="{x:Type MenuItem}">
    <Grid SnapsToDevicePixels="true">
....
</ControlTemplate>

这些模板通过触发器

应用
 <Style x:Key="{x:Static keys:Menu.DefaultItemContainerStyle}" TargetType="{x:Type MenuItem}">
    <Setter Property="Template"
            Value="{DynamicResource {ComponentResourceKey ResourceId=SubmenuItemTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}}" />
    <Style.Triggers>
      <Trigger Property="Role" Value="TopLevelHeader">
        <Setter Property="Template"
                Value="{DynamicResource {ComponentResourceKey ResourceId=TopLevelHeaderTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}}" />
      </Trigger>
      ...
    </Style.Triggers>
  </Style>

这样做有效,但我不希望控制模板在整个应用中是默认的,而是希望通过密钥来控制它们。

<ControlTemplate x:Key="SubmenuItemTemplateKey" TargetType="{x:Type MenuItem}">
    <Grid SnapsToDevicePixels="true">
    ...
</ControlTemplate>

由于某种原因,当通过键直接引用时,触发器无法找到ControlTemplates

 <Style x:Key="{x:Static keys:Menu.DefaultItemContainerStyle}" TargetType="{x:Type MenuItem}">
    <Setter Property="Template" 
            Value="{DynamicResource SubmenuItemTemplateKey}" />
    <Style.Triggers>
      <Trigger Property="Role" Value="TopLevelHeader">
        <Setter Property="Template"
                Value="{DynamicResource TopLevelHeaderTemplateKey}" />
      </Trigger>
      ...
    </Style.Triggers>
  </Style>

0 个答案:

没有答案