不要盲目相信 VS intelli-sense 会始终为您提供正确的错误消息。可能有问题,但我看到 VS 在任何情况下都无法在同一个解决方案中处理多个项目。如果只是警告,请暂时忽略。如果是正确的错误并且无法编译,请在单独的解决方案中构建控件库,并在客户端应用程序中设置对 dll 的正确引用。
利用Style="{StaticResource MyButtonStyle}"
还可以在单独的程序集中查看ResourceDictionary它解释了如何在其他类型的程序集中和其他位置使用资源。
这是适用于我的机器的代码:
在类库项目 WpfControlLibrary1 中,根文件夹中有一个名为“Dictionary1.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="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>