2016-07-11 16 views
0

In unserer Silverlight-App haben wir eine Container-Ansicht, die ein ResourceDictionary-Tag zu einem styles.xaml enthält. Alle Ansichten, die der Container aufruft, erben dieselben Stile.So überschreiben Vorlage Stil in Xaml

Das Problem, das wir haben, ist, dass wir ein benutzerdefiniertes Steuerelement haben, das aus einer Schaltfläche + Textfeld + Popup besteht. Wenn wir dieses benutzerdefinierte Steuerelement in einer beliebigen Ansicht verwenden, funktioniert das Steuerelement zwar, aber das Erscheinungsbild ist nicht korrekt, da es vom Containerstil erbt.

Das benutzerdefinierte Steuerelement sieht in dieser Ansicht nicht richtig aus. Aber wenn wir die Datei "Style.xaml" entfernen, sieht das benutzerdefinierte Steuerelement gut aus.

Wir müssen diese Stilvorlage verwenden.

Gibt es eine Möglichkeit, unserem benutzerdefinierten Steuerelement mitzuteilen, dass es nicht von der Vorlage für Containerstile erbt?

+0

ich Probleme zu visualisieren Ihre Struktur habe, was Sie zu einem von „Resource Tag bedeuten Styles.xaml "? Bedeutet das, dass Sie es als ein MergedDictionary in der übergeordneten Containeransicht eingefügt haben? Sind die Vorlagen in styles.xaml nicht standardmäßig und überschreiben alle untergeordneten Elemente nur global durch TargetType? Es hört sich so an, als müsste man diese Überschreibungen einfach mit einem BasedOn-Standard aufheben, aber ich bin mir nicht sicher, da es zumindest für mich nicht klar ist, was das Setup derzeit ist. :/ –

+0

Meine Containeransicht verfügt über ein MergedDictionary, das auf die Datei styles.xaml verweist, die viele der Schemas für die Steuerelemente definiert. Wenn die Benutzersteuerelemente aufgerufen werden, übernehmen sie ihr Aussehen und Verhalten von der Datei styles.xaml. Das ist in Ordnung, aber das benutzerdefinierte Steuerelement, das wir hinzugefügt haben, sieht einfach nicht korrekt aus. Aber das benutzerdefinierte Steuerelement sieht gut in anderen Formen aus, die dieses styles.xaml nicht verwenden. Gibt es eine Möglichkeit zu überschreiben, was die styles.xaml mit dem benutzerdefinierten Steuerelement aus der Datei styles.xaml tut? – Jerry

+0

Ok Entschuldigung Amigo, aber immer noch Schwierigkeiten zu visualisieren, was wahrscheinlicher der eigentliche Täter wäre. Wenn Sie sagen, dass es nicht korrekt aussieht, bedeutet das, dass es individuelle Kontrolltypen gibt, die nicht wie TextBox aussehen? Sollte ich annehmen, dass Sie ein ControlTemplate definiert haben, das die Vorlage des Steuerelements, das es normalerweise erhält, inhärent überschreibt, wenn Sie ein benutzerdefiniertes Steuerelement haben, dann sehen Sie es aus der Style-Vorlage in Ihrer styles.xaml? Es klingt wie im Fall von beispielsweise einer TextBox, dass es nur darum geht, einen Link zurück zu dem Stil hinzuzufügen, der über die BasedOn-Deklaration benötigt wird. –

Antwort

0

Lassen Sie uns sagen, Sie haben eine Steuer

<UserControl x:Name="MyControl"> 
    <TextBlock Text="Small Text" FontSize="8" /> 
</UserControl> 

und Sie sind glücklich.

Aber der Benutzer legt es in diesen Container

<Grid> 
<Grid.Resources> 
    <Style TargetType="TextBlock"> 
    <Setter Property="Foreground" Value="Red" /> 
    </Style 
</Grid.Resources> 
<MyControl /> 
</Grid> 

Jetzt ist der Textblock Rot und klein sein wird. Dies ist die Art von Problem, mit der Sie konfrontiert sind.

Wenn der Benutzer des Steuerelements diesen Stil nicht überschreiben soll, müssen Sie die Farbe des Textblocks explizit festlegen, z.

<UserControl x:Name="MyControl"> 
    <TextBlock Text="Small Text" Foreground="Black" FontSize="8" /> 
</UserControl> 

ps Sorry, wenn ich die Eigenschaftsnamen falsch verstanden, es ist eine Weile her, seit ich WPF/Silverlight verwendet

Verwandte Themen