在Winform App中定义WPF资源字典

时间:2019-05-29 15:28:20

标签: wpf winforms xaml resourcedictionary

我正在测试是否能够创建可以在现有Winforms应用程序中使用的WPF控件。通过此测试,目标是拥有全球使用的WPF资源字典。

我在控件中定义样式设置的第一步工作正常。

<UserControl.Resources>
    <Style TargetType="Label">
        <Setter Property="Foreground" Value="Black"/>
        <Setter Property="Background" Value="LightYellow"/>
        <Setter Property="FontSize" Value="30"/>
    </Style>
    <Style TargetType="Label" x:Key="myHW">
        <Setter Property="Foreground" Value="Green"/>
        <Setter Property="Background" Value="LightBlue"/>
        <Setter Property="FontSize" Value="30"/>
    </Style>
    <Style TargetType="Label" x:Key="StatusMessage">
        <Setter Property="Foreground" Value="Black"/>
        <Setter Property="Background" Value="LightPink"/>
    </Style>
</UserControl.Resources>

第二步是将样式信息提取到字典XAML文件中,然后通过资源字典进行引用。此步骤无效。

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/Dictionaries/ResourceTest.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

程序集名称:test2

项目内部的路径:/Dictionaries/ResourceTest.xaml

开发中收到的错误是:

异常:查找资源字典“ /Dictionaries/ResourceTest.xaml”时发生错误。

我尝试了Microsoft提出的URI语法的变体。

xaml的构建操作类型是否与问题有关?

1 个答案:

答案 0 :(得分:0)

感谢Jeff R.的答复。那是问题之一。

我继续对此感到困惑,并最终解决了多个问题。由于是在沙盒中的Winforms应用程序中创建的,因此我创建了WPF应用程序,然后添加了资源字典。在两个资源字典xaml文件之间进行了比较,以找出任何差异。

资源字典xaml文件需要更新以下设置:

  • 构建操作=页面
  • 自定义工具= XamlIntelliSenseFileGenerator

此外,词典文件上缺少正确的开始标签。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

最后,由于手动输入源路径不起作用,我尝试使用“属性”页面“源”下拉选择,然后选择所需的路径语法,然后与Jeff R.的建议相匹配。

总而言之,存在三个问题:

  1. 资源字典文件属性设置
  2. 缺少XAML开头标记
  3. URI参考语法