Wie eine globale Art außer Kraft zu setzen (das hat keine x: Key) oder alternativ einen benannten Stil auf alle typ gezielten Kontrollen gilt?

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

Frage

ich einen Stil erklärt, dass ich alle Tasten im Projekt anwenden möchten, befindet sich der Stil in der Resource:

<Style TargetType="StackPanel">
    <Setter Property="Orientation" Value="Horizontal" />
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Center"/>
</Style>

Nun, in einem gewissen Fenster, mag ich von dieser Art erben, aber einen Wert hinzuzufügen:

<Style TargetType="StackPanel"> 
    <Setter Property="Margin" Value="5"/>
</Style>

Das Problem ist, dass es nicht von dem globalen Stil, um ich einen Schlüssel für den globalen Stil zuweisen müssen erben erbt:

<Style TargetType="StackPanel" x:Key="StackPanelStyle" />

Und dann in den XAML vererben Fenstern (oder / und Überschreibung - optional) es:

<Style TargetType="StackPanel" BasedOn="StackPanelStyle" />

Das Problem ist, dass, wenn Sie einen Schlüssel zuweisen, ist es nicht global ist, und Sie haben es auf jedem Fenster / Umfang nennen.

sollte eine Lösung für meine Frage eine der beiden (gibt es noch etwas fehlt mir heraus?):

  1. Haben Sie einen globalen Stil mit einem Schlüssel, die automatisch auf all seinen gezielten Kontrollen in der gesamten Anwendung angewandt wird.
  2. Ein Weg zur Resource-Ebene unbenannte Art zu beziehen, ohne und außer Kraft setzt es.

Ich dachte über die Stile in der Nähe der genannten Arten erneut deklariert werden (im Resource), die tatsächlich funktioniert:

<!--In the ResourceDictionary-->
<Style x:Key="StackPanelStyle" TargetType="StackPanel">
    <Setter Property="Orientation" Value="Horizontal" />
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
<!--In the app.xaml-->
<Style TargetType="StackPanel" BasedOn="{StaticResource StackPanelStyle}"/>
<!--In the window/page scope-->
<Style TargetType="StackPanel" BasedOn="{StaticResource StackPanelStyle}"/

Aber ich bin auf der Suche nach besseren Sachen als dummerweise alle Stile neu deklarieren.

War es hilfreich?

Lösung

Versuchen Sie folgendes:

<Style TargetType="{x:Type StackPanel}" BasedOn="{StaticResource {x:Type StackPanel}}">
  <!-- ... -->
</Style>

ich meine Basis Stile in einem Resource in App.xaml erklärt haben, wenn ich sie in einem bestimmten Fenster, wie dies außer Kraft setzen, es in der Regel funktioniert.

Andere Tipps

Irgendwo in der globalen Ressourcenverzeichnis definieren Sie eine Basis Stil mit einem Schlüssel. Dieser Basis-Stil ist auf eine Art gezielt die Basis für alle Arten, für die Sie diesen Stil anwenden wollen. Dann Sie Stile definieren, welche die Typen zielen, die Sie wollen, und sind auf der Grundlage der oben genannten Basis-Stil.

<Style
    x:Key="upDownBaseStyle"
    TargetType="{x:Type Control}">
    <Setter
      Property="Margin"
      Value="2" />
    <Setter
      Property="HorizontalAlignment"
      Value="Stretch" />
    <Setter
      Property="VerticalAlignment"
      Value="Center" />
  </Style>

  <Style
    TargetType="{x:Type xceed:IntegerUpDown}"
    BasedOn="{StaticResource upDownBaseStyle}">
  </Style>

  <Style
    TargetType="{x:Type xceed:DoubleUpDown}"
    BasedOn="{StaticResource upDownBaseStyle}">
  </Style>

Nun werden die beiden letzten Arten sind ohne Erwähnung eines Schlüssels in Ihrer Anwendung auf alle IntegerUpDown und DoubleUpDown Kontrollen angewandt.

So die Grundregel:. Die Basis-Stil muß die Schlüssel darauf zu verweisen hat, und die daraus abgeleiteten Stile können nicht und daher können sie ohne Schlüssel angewandt werden - nur durch Zieltypen

Ich würde vorschlagen, dass das, was Sie hier suchen werden kann, ist ein Master-Stil oder das Verhalten Szenario, das durch die Schaffung einer Benutzersteuerung im Allgemeinen erreicht wird. Wenn Sie eine neue Tastensteuerung mit ‚globalen‘ Stil angewandt schaffen sind, dann überall würden Sie, dass die Kontrolle verwenden können Sie einfach fügen Sie alle ‚ New Arten oder Arten außer Kraft setzen, wenn / falls sie gebraucht wurden .

Wenn Sie keine Benutzersteuerung angelegt haben, sind sie einfach zu implementieren.

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