2009-08-25 22 views
3

Gibt es eine Möglichkeit, einen Stil auf alle Steuerelemente des gleichen Typs in eine Benutzersteuerung dynamisch anwenden, ohne in allen Steuerelementen meiner Anwendung und ohne auf die Steuerung und setzen zu gehen der Stil manuell?WPF Style zu allen Kontrolle eines UserControl

EDIT Das Problem, das ich 2 Arten in meinem ResorceDictionary ist haben, mit dem x: Key Set

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

Und ich möchte wissen, ob es eine Möglichkeit, in XAML ist dynamisch einen Namen anzuwenden style, ohne den folgenden Code in allen Bildlaufleisten meines Benutzersteuerelements zu verwenden.

<ScrollBar Style="ScrollBar_White"> 

EDIT

Es tut mir leid, ich bin neu in WPF, so fehlt mir Sie wissen, Somethings zu lassen, die wichtig sind (die ich nach dem Auftragen Ihre letzte Lösung zu entdecken). Die letzte Lösung funktioniert tatsächlich, wenn die Stile StaticResources sind, aber sie sind DynamicResources und die BasedOn funktionieren nicht gut mit DynamicResources.

Irgendeine Idee, wie man das mit DynamicResource macht?

Vielen Dank, und Entschuldigung, ich vermisse wichtige Punkte in meinen Fragen.

Antwort

8

Ja, fügen Sie es dem Ressourcenwörterbuch des betreffenden Steuerelements hinzu.

Wenn Sie "dynamisch" sagen, nehme ich an, dass Sie in Code und nicht in XAML meinen. Sie können die ResourceDictionary.Add-Methode für Ihr Benutzersteuerelement aus dem Code-Behind verwenden.

Hier ist ein Beispielcode:

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); 
} 

Dies ist das Äquivalent (in XAML):

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

Da kein x:Key auf den Stil angewendet wird, es von allen Instanz aus gerichtet der Zieltyp Intern wird der Typ selbst als Schlüssel verwendet (glaube ich).

EDIT

das Update auf Ihre Frage gegeben, so scheint es, dass Sie dies wünschen:

<!-- 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>