4 Stimmen

Ist es möglich, einen WPF-Stil auf verschiedene Typen gleichzeitig anzuwenden?

Ich möchte einen Stil erstellen, den ich auf verschiedene Kontrolltypen anwenden kann. So etwas wie dies:

<ToolBar>
    <ToolBar.Resources>
        <Style TargetType="Control">
            <Setter Property="Margin" Value="1"/>
            <Setter Property="Padding" Value="0"/>
        </Style>
    </ToolBar.Resources>

    <ComboBox .../>
    <Button .../>
</ToolBar>

Und sie sollte für die ComboBox und die Button . Aber es funktioniert nicht so, wie ich es hier geschrieben habe.

Ist das irgendwie möglich? Um nur einen Vorfahren dieser Klassen anzuvisieren, wie Control ? Wenn nicht, wie lassen sich gemeinsame Einstellungen am besten auf eine Reihe von Kontrollen anwenden?

10voto

Fredrik Hedblad Punkte 81655

Update

Voir ce Diskussion für einen interessanten Ansatz

Voir ce Frage

Der von Ihnen erstellte Stil zielt nur auf das Steuerelement ab und nicht auf Elemente, die sich von diesem ableiten. Wenn Sie den x:Key nicht setzen, setzen Sie den x:Key implizit auf TargetType, also wenn TargetType="Control", dann x:Key="Control". Ich glaube nicht, dass es einen direkten Weg gibt, dies zu erreichen.

Ihre Optionen sind

<Style x:Key="ControlBaseStyle" TargetType="Control">  
    <Setter Property="Margin" Value="1"/>  
    <Setter Property="Padding" Value="0"/>  
</Style>  

Alle Schaltflächen und Comboboxen zum Beispiel

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ControlBaseStyle}"/> 
<Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource ControlBaseStyle}"/> 

oder verwenden Sie den Stil direkt auf dem Control

<Button Style="{StaticResource ControlBaseStyle}" ...>
<ComboBox Style="{StaticResource ControlBaseStyle}" ...>

0voto

Jason Punkte 1809

Ich glaube nicht, dass Stile die Vererbung in der herkömmlichen Form der Programmierung unterstützen. Es scheint, als wäre es das Beste, das zu tun, was Meleak in seinem ersten Beispiel vorschlägt. Dies würde jedes Steuerelement Typ erzwingen, um die gleiche Basis-Stil haben, aber immer noch erlauben Ihnen die Möglichkeit, die Stile für jeden Typ zu erweitern, wenn Sie zu benötigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X