我正在尝试将我的WPF样式放在一个单独的库中,但有点失去了如何最好地实现这一点。这就是我到目前为止所做的:
在此类库项目中创建文件“MyStyles.xaml” 以下内容:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Button" x:Key="MyButtonStyle">
<Setter Property="Background" Value="Transparent"/>
</Style>
</ResourceDictionary>
建立项目。
创建了一个新的WPF应用程序项目,并引用了该库 建在上面。
在App.xaml中,尝试引用libarary中的资源字典,如下所示:
`<ApplicationResources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MyCustomWpfStyles;component/MyStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
`
此时VS intellisense告诉我发生了错误 在找到资源字典时,虽然是应用程序 建立没有问题。
即使我能够加载资源字典,我也不知道如何
与控件一起使用,例如<Button Style="What goes here??" />
通过互联网查看,但似乎找不到如何将样式打包到单独的dll中的好例子。有什么指针吗?
答案 0 :(得分:2)
不要盲目信任VS智能,随时向您提供正确的错误消息。可能有问题,但我看到VS在所有情况下都无法在同一解决方案中处理多个项目。如果它只是一个警告,暂时忽略。如果它是一个正确的错误并且无法编译,请在单独的解决方案中构建控件库,并在客户端应用程序中设置对dll的正确引用。
使用Style="{StaticResource MyButtonStyle}"
另请参阅ResourceDictionary in a separate assembly它解释了如何在其他类型的程序集和其他位置使用资源。
以下是可在我的机器上运行的代码:
在类库项目WpfControlLibrary1中,名为&#34; Dictionary1.xaml&#34;的根文件夹中的文件:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Button"
x:Key="Demo1">
<Setter Property="BorderBrush"
Value="Red" />
<Setter Property="BorderThickness"
Value="10" />
<Setter Property="Background"
Value="Transparent" />
</Style>
</ResourceDictionary>
请注意,当用于绘制按钮的模板不使用Background属性时,设置Background属性可能不起作用。 WPF在Windows 7上使用的花哨渐变按钮模板不会这样做,但Windows 8.1上的平面按钮模板不会这样做。这就是为什么我添加了一个大的红色边框,以便样式可能部分显示。
在另一个解决方案中,一个Wpf应用程序引用了前一个dll(而不是项目)
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Height="350"
Width="525">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/WpfControlLibrary1;component/Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Button Content="Button"
Style="{StaticResource ResourceKey=Demo1}"
HorizontalAlignment="Left"
Margin="139,113,0,0"
VerticalAlignment="Top"
Width="75" />
</Grid>
</Window>
将合并的字典移动到app对象也可以:
<Application x:Class="WpfApplication1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/WpfControlLibrary1;component/Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>