我在我正在处理的应用程序中遇到了一个小问题。
我正在为我的公司申请一个模块。该应用程序是一个WinForm应用程序,但我一直在研究一个WPF应用程序(不是真正的应用程序,你会看到),它将在WinForm应用程序完成后托管。
为此,我使用的是WinForm元素主机,我创建了一个“shell”用户控件,然后在该shell用户控件中创建了其他用户控件窗口。所以它看起来像一个WPF应用程序,并且只使用WinForm应用程序作为其启动项目,因为WPF应用程序实际上只是WPF控件的集合。
我遇到的问题是,由于我没有创建实际的“WPF应用程序”,因此没有App.xaml。这使我无法按照我的方式使用共享资源,尤其是XAML共享资源。
有没有办法我仍然可以将我的WPF用户控件集合视为WPF应用程序,并以某种方式使用App.xaml文件作为我的资源。如果没有,我在应用程序中使用共享资源的选择是什么。
答案 0 :(得分: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属性),这意味着它读取了{{ 1}}资源。