に単純なデフォルト スタイルを提供したいのですがUserControl
、コントロールを使用するときにスタイルを拡張またはオーバーライドできます。UserControl
以下は、単純なとWindow
コントロールを含む のサンプル シナリオです。Button
で提供されている のスタイルがWindow
、 で定義されているデフォルトのスタイルをオーバーライドすることを目的としていますUserControl
。
ユーザーコントロール
<UserControl x:Class="Sample.TestControl" ... >
<UserControl.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Margin" Value="2" />
<Setter Property="Foreground" Value="Orange" />
</Style>
<Style TargetType="{x:Type StackPanel}">
<Setter Property="Background" Value="Black" />
</Style>
</UserControl.Resources>
<StackPanel>
<Button Content="Press Me" />
<Button Content="Touch Me" />
<Button Content="Tap Me" />
</StackPanel>
</UserControl>
窓
<Window x:Class="Sample.MainWindow" ... >
<Grid>
<local:TestControl>
<local:TestControl.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Margin" Value="2" />
<Setter Property="Foreground" Value="Green" />
</Style>
</local:TestControl.Resources>
</local:TestControl>
</Grid>
</Window>
問題
上記のコードは次のようになります。
- 例外:
Set property 'System.Windows.ResourceDictionary.DeferrableContent' threw an exception.
- 内部例外:
Item has already been added.
上記のコードは、同じキーを持つ 2 つのスタイルを同じ に送信しようとしているResourceDictionary
ため、明らかに機能しません。ボタンにデフォルトのスタイルを提供することはできないと思います...