2011-05-02 158 views
4

我在我正在处理的应用程序中遇到了一个(很大的)问题。WPF共享资源问题 - 没有App.xaml,没有共享资源

我正在为我的公司申请一个模块。该应用程序是一个WinForm应用程序,但我一直在研究一个将在此WinForm应用程序中托管的WPF应用程序(不像您将看到的应用程序)。

为此,我使用WinForm元素主机,并且创建了一个“shell”用户控件,然后在该shell用户控件内部创建了其他用户控件窗口。所以它看起来像一个WPF应用程序,并且只使用WinForm应用程序作为它的启动项目,因为WPF应用程序实际上只是一组WPF控件。

我遇到的问题是因为我没有创建一个实际的“WPF应用程序”,所以没有App.xaml。这使我无法按照自己的愿望使用共享资源,特别是XAML共享资源。

有没有办法仍然可以将我的WPF用户控件集合作为WPF应用程序,并以某种方式为我的资源使用App.xaml文件。如果不是,我的应用程序中使用共享资源的选项是什么。

回答

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是一个字符串DP财产我手动添加到CustomControl1),这意味着它读取myString资源。

你可以找到一些更具体的信息herehere