6

次のシナリオを確認してください (他のシナリオも同様に適用される可能性があります) [ここのコードを適切なファイルにコピーして貼り付けるだけでプロジェクトを作成できます]:

a - 基本的なもの (Resources.xaml) で ResourceDictionary を作成します。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <SolidColorBrush Color="Red" x:Key="Test" />

    <Style TargetType="{x:Type GroupBox}" x:Key="Test2" >
        <Setter Property="Background" Value="Blue" />
    </Style>

    <Style TargetType="{x:Type TextBlock}" >
        <Setter Property="Foreground" Value="Green" />
    </Style>
</ResourceDictionary>

b - 他のユーザーが基本リソースを含むユーザー コントロール ベースを継承する (UserControlBase.cs) を作成します。

using System.Windows.Controls;
using System;
using System.Windows;

namespace ResourceTest
{
    public class UserControlBase : UserControl
    {
        public UserControlBase()
        {
            this.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("ResourceTest;component/Resources.xaml", UriKind.RelativeOrAbsolute) });
        }
    }
}

c - ベース (UserControl1.xaml) から継承する UserControl を作成します。

<ResourceTest:UserControlBase x:Class="ResourceTest.UserControl1"

             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"
             xmlns:ResourceTest="clr-namespace:ResourceTest"

             mc:Ignorable="d" 

             d:DesignHeight="300" 
             d:DesignWidth="300" >
    <Grid>
        <GroupBox BorderBrush="{StaticResource Test}" Margin="3" Header="Test" Style="{DynamicResource Test2}" >
            <TextBlock Text="TESTTEST" />
        </GroupBox>

    </Grid>
</ResourceTest:UserControlBase>

結果: StaticResources は解決されません (そして Test BorderBrush は読み込まれません)。DynamicResources は解決されます (背景は青色) が、デザイナーはとにかくリソースを見つけることができないと言います (最初は問題なく動作しますが、デザイナーを開いたり閉じたりすると、リソースを解決できません)。TextBlock スタイルのような名前のないリソースは正常に機能します。

これはデザイナーのバグですか、それとも何か間違っていますか? リソースが決して変更されないシナリオで、リソースを動的として宣言する必要がありますか?

ここに画像の説明を入力

前もって感謝します。

4

1 に答える 1