Domanda

Stavo solo curiosando un po 'in WPF e volevo che tutti gli elementi sulla mia finestra condividessero lo stesso margine. Ho scoperto che tutti i controlli in grado di avere un margine derivano da FrameworkElement, quindi ho provato quanto segue:

<Window.Resources>
<Style TargetType="{x:Type FrameworkElement}">
    <Setter Property="Margin" Value="10" />
</Style>
</Window.Resources>

E questo non funziona. Posso applicarlo a tutti i pulsanti, ma non a tutti gli elementi derivati ??da Button. Mi sto perdendo qualcosa o semplicemente non è possibile?

Sono l'unico a pensare che usare CSS per WPF sarebbe stata una buona idea?

È stato utile?

Soluzione

Sfortunatamente, non è possibile applicare gli stili al tipo FrameworkElement di base; mentre WPF ti permetterà di scrivere lo stile, non lo applicherà ai controlli che ne derivano. Sembra che ciò si applichi anche ai sottotipi di FrameworkElement, ad es. ButtonBase, il supertipo di Button / ToggleButton / RepeatButton.

Puoi comunque usare l'ereditarietà, ma dovrai usare la sintassi BasedOn esplicita per applicarla ai tipi di controllo a cui vuoi applicare.

<Window.Resources>
    <Style TargetType="{x:Type FrameworkElement}">
        <Setter Property="Margin" Value="10" />
    </Style>

    <Style TargetType="{x:Type Label}" BasedOn="{StaticResource {x:Type FrameworkElement}}" />
    <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type FrameworkElement}}" />
    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type FrameworkElement}}" />

</Window.Resources>

Altri suggerimenti

Il problema è che durante la ricerca di uno stile WPF non cerca in tutte le classi da cui deriva quella corrente. Tuttavia, puoi assegnare una chiave allo stile e applicarlo a tutti gli elementi per i quali desideri avere una proprietà comune. Se una proprietà è specificata nello stile che non può essere applicata all'elemento che stai disegnando, viene ignorata.

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