マルチターゲットアプリケーション (.net 4.0)を作成しています。ResourceDictionay に問題があります。 シナリオ: WPF CustomControlLibrary の作成 - 「WpfLib」という名前、デフォルトの名前空間「test」 WpfLib で UserControl を作成 - 「uc」という名前
<UserControl x:Class="test.uc"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="res.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<Button Style="{StaticResource bStyle}" Content="Button" Height="23" Width="75" />
</Grid>
</UserControl>
「res.xaml」のコード
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="bStyle" TargetType="{x:Type Button}">
<Setter Property="Background" Value="Red" />
</Style>
</ResourceDictionary>
今はすべてが素晴らしいです....ボタンは赤です
次に、新しい Project Silverlight アプリケーションを追加して、「SlApp」(Silverlight 5)(名前空間「test」) という名前を付けます。「WpfLib」から「uc」を link(「uc.xaml」「uc.xaml.cs」) として追加します。「SlApp」に新しい ResourceDictionary を作成し、次のように res.xaml という名前を付けます。
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="bStyle" TargetType="Button">
<Setter Property="Background" Value="Blue" />
</Style>
</ResourceDictionary>
x:Type は SilverLight でサポートされていないため、新しい ResourceDictionary には TargetType="Button" があります。背景は赤ではなく青に設定されています。
そして、ここから問題が始まります。
どうすれば機能しますか?コントロール uc はマージ時にエラーを表示します (Silverlight バージョンで)。ユーザー コントロールの Wpf と Silverlight バージョンで異なる ResourceDictionary が必要です。ClassLibrary は app.xaml をサポートしておらず、デフォルトのスタイルを使用できません。