2016-12-07 9 views
0

をインライン化。WPFセッターの値は、私はこのコードを持って

私は私のコードをインライン化しようとしたので、私はこれを書いた:

<Setter Property="WindowChrome.WindowChrome" 
     Value="{x:Static SystemParameters.CaptionHeight}"/> 

をしかし、私は、アプリケーションを実行する場合、今、それは起動しません。どうして?

+0

1番目のオプションのように残しておけばそれは機能しますか? – Tuco

+0

はい、完全に正常に動作します。 –

+1

'SystemParameters.CaptionHeight'は' WindowChrome'型のオブジェクトではないので、WPFはそれを暗黙的に変換することができません。 –

答えて

1

プロパティのタイプはWindowChromeなので、タイプWindowChromeの値が必要です。

最初のケースでは、うまくいきます。また、プロパティCaptionHeightの正しい型の値をインスタンスに渡します。

2番目のケースでは、WindowChromeプロパティに完全に異なるタイプ(タイプはCaptionHeight)を割り当てようとしています。

アプリケーション内WindowChromeのただ1つのインスタンスがある場合さて、あなたはStaticResourceとしてそれを宣言することができます。

<App.Resources> 
    <WindowChrome x:Key="WindowChromeResource" 
       CaptionHeight="{x:Static SystemParameters.CaptionHeight}"/> 
    </WindowChrome> 
</App.Resources> 

そして、あなたが必要とするたびにそれを呼び出す:

<Setter Property="WindowChrome.WindowChrome" 
     Value="{StaticResource WindowChromeResource}"/> 

代わりに、動的な番号の異なるインスタンスが必要な場合は、これは絶対にできません。

多くの開発者は、あなたの前に何度もWPFの詳細について主張してきましたが、WPFチームはこれを改善しませんでした。広範な議論については、thisおよびthisを参照してください。

関連する問題