2

現在、いくつかの WPF ウィンドウを持ついくつかの WPF クラス ライブラリを開発しており、これらのウィンドウのより優れたデザインを作成するために、これらのウィンドウ用に独自のウィンドウ ControlTemplate を作成しようとしています (この記事に触発されました: Reusing Control Templates in Resource Dictionaries )。

問題は、アプリケーション アセンブリではなく WPF クラス ライブラリであり、app.xaml を使用してリソース ディクショナリ参照などを定義できることです。

以下のコードを使用すると、エラーが発生します: StaticResource 参照 'MyWindowStyle' が見つかりませんでした

<Window x:Class="SomeERP.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300"
    Style="{StaticResource MyWindowStyle}">
    <Window.Resources>
        <!-- My Window Style -->
        <Style x:Key="MyWindowStyle" TargetType="Window">
            <Setter Property="Background" Value="Transparent" />
            <Setter Property="WindowStyle" Value="None" />
            <Setter Property="AllowsTransparency" Value="True" />
            <Setter Property="Opacity" Value="0.95" />
            <Setter Property="Template" Value="{StaticResource MyWindowTemplate}" />
        </Style>

        <!-- Window Template -->
        <ControlTemplate x:Key="MyWindowTemplate" TargetType="{x:Type Window}">
            <Grid>
            </Grid>
        </ControlTemplate>
    </Window.Resources>
</Window>

私の場合、クラスライブラリにないapp.xamlのアプリケーションの場合のように、ウィンドウ宣言の前に事前宣言されていないため、このエラーが発生すると思われます。私は WPF の初心者で、WPF の設計の可能性を使い始めたばかりです。

4

3 に答える 3

0

この投稿で私の問題の解決策を見つけたようです: WPFクラスライブラリのアセンブリ全体/ルートレベルのスタイルと、この投稿によると、WPFの静的リソースと動的リソースの違いは何ですか?

StaticResourceは、アプリケーションが実際に実行される前に発生する XAML の読み込み中に解決され、プロパティに割り当てられます。一度だけ割り当てられ、リソース ディクショナリへの変更は無視されます。

DynamicResourceは、読み込み中に Expression オブジェクトをプロパティに割り当てますが、実行時に Expression オブジェクトが値を求められるまで、実際にはリソースを検索しません。これにより、実行時に必要になるまでリソースの検索が延期されます。良い例は、後で XAML で定義されたリソースへの前方参照です。もう 1 つの例は、実行時まで存在すらしないリソースです。ソース リソース ディクショナリが変更されると、ターゲットが更新されます。

クラスライブラリがあり、 app.xaml がなく、Windowのリソースを事前宣言できないため、それが必要でした。動作させるには、 StaticResource ではなく DynamicResource を使用するだけです。

ご清聴ありがとうございました:)

于 2013-06-13T15:12:58.677 に答える