WPF Grid.Resources 样式打破了 ResourceDictionary 样式。如何让它们共存?

标签 wpf xaml resources resourcedictionary

在 WPF 应用程序中,我有一个 ResourceDictionaryStyle为 TargetType 定义 MyCustomControl :

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:cc="clr-namespace:MyControlLibrary;assembly=MyControlLibrary" >

  <Style TargetType="{x:Type cc:MyCustomControl}"> 
    <Setter Property="Prop1" Value="1" />
    <Setter Property="Prop2" Value="2" />
    ...

问题是我需要为 MyCustomControl 定义一个上下文菜单在页面 XAML 中,如下所示:
   <Grid>
     <Grid.Resources>
           <ContextMenu x:Key="MyControlContextMenu">
               <MenuItem Name="Name1" 
                         Header="Header1" 
                         Click="Cm1_Click"
                         .../>                   
                ....
            </ContextMenu>
       <Style TargetType="{x:Type ScNamespace:MyCustomControl}">
         <Setter Property="ContextMenu" Value="{StaticResource MyControlContextMenu}"/>
       </Style>
     </Grid.Resources>
   ...

在这种情况下,虽然我只在网格内的样式定义中分配了一个属性,但根本不应用 ResourceDictionary 样式值。它们被页面资源样式覆盖并被忽略。

如何解决这个问题?也许有一种方法可以在 Grid.Resources 部分引用 ResourceDictionary 来强制查找 ResourceDictionary 样式?

最佳答案

根据您的默认样式创建新样式:

<Style TargetType="{x:Type ScNamespace:MyCustomControl}" BasedOn="{StaticResource {x:Type ScNamespace:MyCustomControl}}">
    <Setter Property="ContextMenu" Value="{StaticResource MyControlContextMenu}"/>
</Style>

关于WPF Grid.Resources 样式打破了 ResourceDictionary 样式。如何让它们共存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5901710/

相关文章:

c# - 如何使用tabControl在XAML中使用两个ViewModels代码

c# - 如何找到所有实现接口(interface)并调用方法的对象

c# - 使用 DataGrid 在一列中显示多个标题

error-handling - 用于抽象资源分配/解除分配的惯用 Go

c# - 在命令 shell 中退出 WPF 应用程序

.net - 如何在 WPF 中使列表框透明,但列表框项不透明?

c# - Xamarin.Forms ListView 大小到内容

c# - 如何在 UWP MVVM 中使用 CalenderView

java - 使用Lombok的@Cleanup时如何捕获异常?

data-binding - Silverlight 4 TargetNullValue 到资源