WPF共享资源问题 - 没有App.xaml文件,没有共享资源

4
我在处理一个应用程序时遇到了一个小问题(实际上是大问题)。这个应用程序是一个WinForm应用程序,但我正在开发一个WPF应用程序(你将会看到它并不是一个真正的应用程序),当它完成后,将会被托管在这个WinForm应用程序中。
为了做到这一点,我使用了WinForm元素主机,并创建了一个“外壳”用户控件,然后在该外壳用户控件内部创建了其他用户控件窗口。所以它看起来像一个WPF应用程序,只使用WinForm应用程序作为其启动项目,因为WPF应用程序实际上只是一组WPF控件。
我遇到的问题是,由于我没有创建一个实际的“WPF应用程序”,所以没有App.xaml。这使我无法按照我想要的方式使用共享资源,特别是XAML共享资源。
是否有一种方法可以仍然将我的一组WPF用户控件视为WPF应用程序,并为我的资源使用App.xaml文件?如果没有,那么我在应用程序中使用共享资源的选项是什么?
1个回答

1
将一个 ResourceDictionary (xaml) 文件添加到项目中(假设它是一个类库 - WPF 自定义控件库),在 Generic.xaml 之上进行合并,然后您就可以引用它并使用您的 StaticResource
您也可以在 Generic.xaml(或任何 xaml 文件)文件本身中包含该资源。
以下是您当前字典应该看起来的样子:
<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:sys="clr-namespace:System;assembly=mscorlib"   
  xmlns:local="clr-namespace:WpfCustomControlLibrary1">

  <sys:String x:Key="myString">sdfasdf</sys:String>

  <Style TargetType="{x:Type local:CustomControl1}">
    <Setter Property="Text" Value="{StaticResource myString}"/>
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type local:CustomControl1}">
          <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
            <TextBlock Text="{TemplateBinding Text}"/>
          </Border>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
</ResourceDictionary>

我在VS2010中初始化了一个设计时实例的控件,它显示了文本(Text是我手动添加到CustomControl1的字符串DP属性),这意味着它读取了myString资源。

你可以在这里这里找到更具体的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接