8

というわけで、C# で WPF を使って GUI を作っています。次のようになります。

それは現在行われていません。これらの 2 行は、一種のデータ テーブルを作成しようとした私の試みであり、XAML でハードコードされています。

現在、C# で新しいフルーツ ボタンの追加機能を実装しています。行の背景画像がどのように見えるかを管理する XAML に次のスタイルがあります。

<Style x:Key="stretchImage" TargetType="{x:Type Image}">
    <Setter Property="VerticalAlignment" Value="Stretch"/>
    <Setter Property="HorizontalAlignment" Value="Stretch"/>
    <Setter Property="Stretch" Value="Fill"/>
</Style>

col0そのため、コードでは、 、col1、およびの各列の画像を作成しますcol2。次のコードを使用すると、

col0.Style = (Style)Application.Current.Resources["stretchImage"];
col1.Style = (Style)Application.Current.Resources["stretchImage"];
col2.Style = (Style)Application.Current.Resources["stretchImage"];

次のような新しい行が追加されます。

ご覧のとおり、これは正しくありません...そして、ウィンドウを引き伸ばすと、問題が悪化します。

スタイルの「ストレッチ」プロパティを尊重していないようです。

しかし、代わりにスタイルの読み込みコードを

col0.Style = (Style)FindResource("stretchImage");
col1.Style = (Style)FindResource("stretchImage");
col2.Style = (Style)FindResource("stretchImage");

それは美しく動作します:

(繰り返しますが、アプリは完成していませんので、心配しないでください)、私の主な質問は次のとおりです: と の違いは何Application.Current.Resources[]ですかFindResource()? 一部のプロパティを無視しているように見えるのに、他のプロパティは無視していないのはなぜですか? また、可能であれば、どうすればApplication.Current.Resources[]適切に仕事をすることができるでしょうか?

4

1 に答える 1

16

リソースは、ビジュアル ツリーのほぼすべての要素で定義できます。FrameworkElement.FindResource() は、各ノードでリソースを探してツリーをたどり、最終的にアプリケーションまでたどり着きます。Application.Current.Resources[] は、これらすべてをスキップして、アプリケーションのリソースに直接アクセスします。ほとんどの場合、FindResource() を使用して、さまざまなポイントでスタイルをオーバーライドできるようにします。

于 2013-07-17T16:38:22.093 に答える