我用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>