2013-07-17 13 views
6

私はC#でWPFを使ってGUIを作っています。それは次のようになります。それは今(wpf)Application.Current.Resources vs FindResource

を行っていません。これら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> 

、コードでは、私は、col1、各列、col0用の画像を作成し、col2

:私は次のコードを、

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

を使用している場合、それはこのようになります新しい行を追加します0

あなたが見ることができるように、それは非常に適切ではありません... とウィンドウを伸ばすには、問題を悪化させる:

それはスタイルの「ストレッチ」プロパティを尊重することはないようです。

しかし、その後、私が代わりに

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

に自分のスタイルローディングコードを変更する場合、それは見事に動作します:

(ここでも、アプリは終了していない、そうではありません私が心配しているのは、Application.Current.Resources[]FindResource()の違いは何ですか?なぜ、他の人はプロパティの一部を無視するように見えるのですか?そして、もし可能であれば、どうすればApplication.Current.Resources[]が正しく動作するのでしょうか?

+1

関連するXAMLを転記してください。私がここで見ることができるのはスタイルです。 –

+0

Arrighty then:http://pastebin.com/05sKWMST – Pojo

+1

あなたのXAMLはすべて間違っています。私はそれを修正し、あなたに戻ってみましょう。 –

答えて

12

リソースは、ビジュアルツリーのほぼすべての要素で定義できます。 FrameworkElement.FindResource()は、各ノードのリソースを探してツリーを歩き、最終的にはApplicationに至ります。 Application.Current.Resources []はこれをすべてスキップし、アプリケーション上のリソースについてはまっすぐに進みます。ほとんどの場合、FindResource()を使用してさまざまなポイントでスタイルをオーバーライドできます。

関連する問題