Standard -benutzerdefinierte Steuerungssteuerung wird bei Verwendung des Stils nicht angewendet

StackOverflow https://stackoverflow.com/questions/2402160

  •  18-09-2019
  •  | 
  •  

Frage

Ich habe einen Standardstil für eine Schaltfläche erstellt, in der eine benutzerdefinierte Steuerungsplatte wie SO mitgeführt wird:

<Style TargetType="{x:Type Button}">
    <Setter Property="OverridesDefaultStyle" Value="True"/>
    <Setter Property="Background" Value="White"/>
    <Setter Property="BorderBrush" Value="Black"/>
    <!-- ...other property setters... -->
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid x:Name="gridMain">
                    <!-- some content here -->
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Dieser Stil wird zu meinem gemeinsam genutzten Ressourcenwiderhandel hinzugefügt, das von jeder Kontrolle geladen wird. Jetzt wird dieser Stil/diese Vorlage wie erwartet auf alle meine Schaltflächen angewendet, aber nicht auf die Schaltflächen angewendet, die lokal einen anderen Stil verwenden. Zum Beispiel möchte ich einen bestimmten Vorsprung für meine Tasten "OK", "Apply" und "Abbrechen" haben. Daher habe ich den folgenden Stil definiert:

<Style x:Key="OKApplyCancelStyle" TargetType="{x:Type Button}">
    <Setter Property="Margin" Value="4,8"/>
    <Setter Property="Padding" Value="8,6"/>
    <Setter Property="MinWidth" Value="100"/>
    <Setter Property="FontSize" Value="16"/>
</Style>

... und wendete diesen Stil mit einer staticResource auf meine Schaltflächen an:

<Button Content="OK" Style="{StaticResource OKApplyCancelStyle}"/>

Für mich wäre das erwartete Ergebnis, dass die obige ControlTemplate immer noch angewendet wird, wobei die Werte für Marge, Polsterung, Minwidth und Fontsize von "OkapplyCancelstyle" verwendet werden. Dies ist jedoch nicht der Fall. Die Standard -Windows ControlTemplate wird stattdessen verwendet, wobei die Werte aus dem Stil verwendet werden.

Ist das das typische Verhalten? Überschreibt ein lokaler Stil wirklich eine benutzerdefinierte Steuerung? Wenn ja, wie kann ich mein gewünschtes Verhalten erreichen? IE Verwenden Sie immer noch meine benutzerdefinierte Steuerung, auch wenn Stile lokal definiert sind?

Vielen Dank im Voraus, Gehho.

War es hilfreich?

Lösung

Vollständig aus dem Gedächtnis hier, aber so etwas wie (oder sehr ähnlich)

<Style x:Key="OKApplyCancelStyle" BasedOn="{StaticResource {x:Type Button}}">
<!--Style here-->
</Style>

könnte funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top