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 プロパティの設定が機能しない可能性があることに注意してください。Windows 7 で WPF が使用する派手なグラデーション ボタン テンプレートはそれを行いませんが、Windows 8.1 のフラットなボタン テンプレートは行います。そのため、スタイルが部分的に表示されるように、大きな赤い枠を追加しました。
別のソリューションでは、以前の dll (プロジェクトではない) を参照する Wpf アプリケーション
<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>
マージされた辞書をアプリ オブジェクトに移動することも同様に機能します。
<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>