Come eseguire l'override di uno stile globale (che non hanno una x:Key), o, in alternativa, applicare uno stile a tutti i tipi di controlli mirati?

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

Domanda

Ho dichiarato un stile che voglio applicare a TUTTI i pulsanti nel progetto, lo stile risiede nel ResourceDictionary:

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

Ora, in una finestra, voglio ereditano da questo stile, ma aggiungere un valore:

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

Il problema è che non eredita lo stile globale, al fine di ereditare devo assegnare un tasto per lo stile globale:

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

E poi nella finestra di XAML ereditare (e/o ignorare - opzionale) è:

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

Il problema è che se si assegna una chiave, non è globale e devi chiamare su ogni finestra/campo di applicazione.

Una soluzione alla mia domanda dovrebbe essere uno dei due (c'è qualcos'altro che mi sto perdendo?):

  1. Hanno uno stile globale con una chiave, che viene applicato automaticamente a tutti i suoi controlli mirati in tutta l'applicazione.
  2. Un modo per fare riferimento al ResourceDictionary a livello di stile senza nome e senza forzare.

Ho pensato di redeclaring stili vicino al nome di stili (in ResourceDictionary) che in realtà funziona:

<!--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}"/

Ma sto cercando roba migliore che stupidamente ridichiarare tutti gli stili.

È stato utile?

Soluzione

Prova questo:

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

Ho dichiarato il mio stile di base in un ResourceDictionary in App.xaml, se li sovrascrivo in una finestra specifica come questo, di solito funziona.

Altri suggerimenti

Da qualche parte in risorsa globale dizionario definire uno stile di base con una chiave.Lo stile di base è destinato a un tipo che è la base per tutti i tipi per i quali si intende applicare tale stile.Quindi è possibile definire stili di destinazione i tipi che si desidera, e sono basate sulla base di quanto sopra indicato di stile.

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

Ora le ultime due stili vengono applicati a tutti i IntegerUpDown e DoubleUpDown controlli all'interno dell'applicazione, senza alcuna menzione di un tasto.

Quindi, la regola di base:lo stile di base deve avere la chiave per fare riferimento, e la derivata stili può, non e quindi essi possono essere applicati senza chiavi - solo da tipi di destinazione.

Vorrei suggerire che ciò che si può essere cercate: ecco uno stile di master o scenario di un comportamento che viene generalmente raggiunta con la creazione di un controllo utente. Se si dovesse creare un nuovo controllo pulsante con il tuo stile 'globale' applicata ad esso, allora ovunque si utilizzi che il controllo si può semplicemente aggiungere eventuali ' Nuovi stili o sovrascrivere stili se / quando erano necessari .

Se non si è creato un controllo utente, sono facili da implementare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top