4

次のように、XAML でリソースのエイリアスを作成しようとしています。

<UserControl.Resources>

    <StaticResourceExtension x:Key="newName" ResourceKey="oldName"/>

</UserControl.Resources>

oldNameImageは、 で定義されたタイプ のリソースを参照するだけApp.xamlです。

私が理解している限り、これはこれを行う正しい方法であり、正常に機能するはずです。ただし、XAML コードでは、非常に役に立たないエラーが表示されます。

"The application XAML file failed to load. Fix errors in the application XAML before opening other XAML files."

これStaticResourceExtensionは、コード内の行 (波線の下線) にカーソルを合わせると表示されます。実際のエラー リストには他にもいくつかのエラーが生成されますが、行が削除されるとすべて消えるため、かなり無関係で無意味なエラー (「名前 'InitializeComponent' は現在のコンテキストに存在しません」などのメッセージ) のように見えます。

私はここで完全に困惑しています。WPF がこのコードについて不平を言うのはなぜですか? 解決策についてのアイデアはありますか?

注: .NET 3.5 SP1 で WPF を使用しています。

更新 1:
コンパイラ エラー (前述のエラー リストのメッセージ) が表示される ことを明確にする必要があるため、これは単なる設計者の問題ではありません

更新 2:
関連するコードの全文は次のとおりです...

App.xaml 内 ( の下Application.Resource):

<Image x:Key="bulletArrowUp" Source="Images/Icons/bullet_arrow_up.png" Stretch="None"/>
<Image x:Key="bulletArrowDown" Source="Images/Icons/bullet_arrow_down.png" Stretch="None"/>

MyUserControl.xaml (の下UserControl.Resources):

<StaticResourceExtension x:Key="columnHeaderSortUpImage" ResourceKey="bulletArrowUp"/>
<StaticResourceExtension x:Key="columnHeaderSortDownImage" ResourceKey="bulletArrowDown"/>

もちろん、これらはエラーを生成する行です。

4

2 に答える 2

2

できる限り試してみてください。問題を再現できません。あなたが投稿したコードよりも多くのことが行われていると思います。これは私にとってはうまくいきます:

App.xaml :

<Application x:Class="WpfApplication1.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="Window1.xaml">
    <Application.Resources>
        <Image x:Key="bulletArrowUp" Source="Leaves.jpg" Stretch="None"/>
        <Image x:Key="bulletArrowDown" Source="Leaves.jpg" Stretch="None"/>
    </Application.Resources>
</Application>

Window1.xaml :

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="Window1" Height="300" Width="300">
    <local:UserControl1/>
</Window>

UserControl1.xaml :

<UserControl x:Class="WpfApplication1.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <UserControl.Resources>
        <StaticResourceExtension x:Key="columnHeaderSortUpImage" ResourceKey="bulletArrowUp"/>
        <StaticResourceExtension x:Key="columnHeaderSortDownImage" ResourceKey="bulletArrowDown"/>
    </UserControl.Resources>
    <ContentControl Content="{StaticResource columnHeaderSortUpImage}"/>
</UserControl>

プロジェクトにLeaves.jpg画像を追加したところ、問題なく表示されました。

于 2009-07-17T15:35:59.523 に答える
1

Kentと同じセットアップを使用しようとしましたが、次のエラーが発生しました。

Property 'Resources' does not support values of type 'System.Windows.Controls.Image'.

他のいくつかのタイプも試しましたが、同じものが得られました(完全修飾タイプ名が異なる場合のみ)。

<UserControl.Resources>次の方法でのみ、画像のキーを再入力できました。

<UserControl.Resources>
    <Image x:Key="myimg"
           Source="{Binding Source={StaticResource appimg}, Path=Source}"
           Stretch="{Binding Source={StaticResource appimg}, Path=Stretch}"/>
</UserControl.Resources>

私は疑問に思う必要があります:なぜですか?リソースは、キーを再入力するようには設計されていません。私は、あなたが最終的に達成しようとしていることは、他の方法でより良く、より簡単にできるのではないかと疑っています。おそらくスタイルのセッターと。

于 2009-07-29T17:48:50.463 に答える