2017-03-01 2 views
1

Ich bin ein 3rd-Party ContentControl verwendet, die mit dem folgenden Thema kommt:Stil BasedOn ein Stil definiert in Control Ressourcen

<Style TargetType="{x:Type xyz:XyzControl}" x:Key="XyzControl"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type xyz:XyzControl}"> 
       <ControlTemplate.Resources> 
        <Style TargetType="Button"> 
        <!-- A lot of styling... --> 
        </Style> 
       </ControlTemplate.Resources> 
       <!-- More template stuff... --> 

Ich möchte einige DataTriggers auf Schaltflächen in diesem Steuerelement hinzuzufügen, aber ich möchte, dass die halten Standardstyling aus dem Steuerelementthema.

<xyz:XyzControl> 
    <Button> 
    <Button.Style> 
     <Style TargetType="Button" BasedOn="{???}"> 
     <Style.Triggers> 
     </Style.Triggers> 
     </Style> 
    </Button.Style> 
    </Button> 
</xyz:XyzControl> 

Ich habe versucht, auf {StaticResource {x:Type Button}} aber lädt die globale Standard Schaltfläche Stil, nicht der Standardstil in diesem Zusammenhang zu stützen.

Antwort

0

dies nicht möglich ist, da Sie kein ControlTemplate auf einem anderen ControlTemplate aufbauen können. Sie müssen die gesamte Vorlage als Ganzes neu definieren müssen:

WPF: Is there a way to override part of a ControlTemplate without redefining the whole style?

und das Hinzufügen eines Triggers zu einem Style nicht oder „überschreiben“ die Auslöser beeinflussen, die so in der ControlTemplate der Steuerung definiert werden Sie müssen die gesamte ControlTemplate von Grund auf überschreiben.

Sie können natürlich den Standard in Ihr XAML-Markup kopieren und entsprechend Ihren Anforderungen bearbeiten.

0

einen Schlüssel für die dritte Partei Schaltfläche Stil hinzufügen:

<Style TargetType="Button" x:key="xyzbuttonStyle"> 

dann:

<Style TargetType="Button" BasedOn="{StaticResource xyzbuttonStyle}"> 
+0

Thx, aber 3rd Party heißt 3rd Party, weil es nicht meine Party ist :-) Ich kann diesen Code nicht ändern. – hansmaad