2009-08-25 6 views
3

で同じタイプのすべてのコントロールにスタイルを適用する方法はありますか?アプリケーションのすべてのコントロールにコントロールを適用せずに、手動でスタイル?WPFスタイルを1つのUserControlのすべてのコントロールに適用

EDIT 問題は私のResorceDictionaryに私はXと、2つのスタイルを持っていることです:キーが

<Style x:Key="ScrollBar_White" TargetType="{x:Type ScrollBar}"> 
<Style x:Key="ScrollBar_Black" TargetType="{x:Type ScrollBar}"> 

を設定し、私は動的という名前を適用するためのXAMLでの方法があるかどうかを知りたいです私のUserControlのすべてのスクロールバーで次のコードを使用せずにスタイルを使用します。

<ScrollBar Style="ScrollBar_White"> 

EDIT

すみません、私はWPFに新しいので、私はあなたが(私はあなたの最後の溶液を塗布した後に発見していること)が重要です代を知っているように欠けています。 最後の解決策は、スタイルがStaticResourcesで、DynamicResourcesであり、BasedOnがDynamicResourcesでうまく動作しない場合に実際に機能します。

DynamicResourceでこれを行うにはどうすればいいですか?

多くのおかげで、申し訳ありませんが、私は私の質問に重要な点を逃しています。

答えて

8

はい、問題のコントロールのリソースディクショナリに追加します。

「動的に」と言うと、私はXAMLではなくコードであるとみなします。 Code BehindからユーザーコントロールのResourceDictionary.Addメソッドを使用できます。

ここではいくつかのサンプルコードがあります:

public MyUserControl() 
{ 
    InitialiseComponent(); 

    var style = new Style(typeof(TextBlock)); 
    var redBrush = new SolidColorBrush(Colors.Red); 
    style.Setters.Add(new Setter(TextBlock.ForegroundProperty, redBrush)); 
    Resources.Add(typeof(TextBlock), style); 
} 

これは(XAML)での等価です:

<UserControl.Resources> 
    <Style TargetType="TextBlock"> 
    <Setter Property="Foreground" Value="Red" /> 
    </Style> 
</UserControl.Resources> 

x:Keyがスタイルに適用されていないので、それはすべてのインスタンスによってピックアップされますターゲットタイプ。内部的には、型自体がキーとして使用されます(私は信じています)。あなたの質問への更新を考えると

EDIT

、あなたがこれをしたいようだ:

<!-- this is the parent, within which 'ScrollBar_White' will be applied 
    to all instances of 'ScrollBar' --> 
<StackPanel> 
    <StackPanel.Resources> 
    <Style TargetType="ScrollBar" BasedOn="{StaticResource ScrollBar_White}" /> 
    </StackPanel.Resources> 
    <!-- scrollbars in here will be given the 'ScrollBar_White' style --> 
<StackPanel> 
関連する問題