Frage

Szenario:

Ich möchte für meine WPF-Anwendung 3 Standard-Schriftgröße: BigFontSize, NormalFontSize und SmallFontSize. Dies sind doppelt Werte, und sie sind in den Ressourcen Wörterbuch definiert als (wo sys wird in geeigneter Weise definiert):

<sys:Double x:Key="BigFontSize">18</sys:Double>
<sys:Double x:Key="NormalFontSize">14</sys:Double>
<sys:Double x:Key="SmallFontSize">12</sys:Double>

Das funktioniert gut. Aber ich habe zufällig 14 als normale Größe ausgewählt. Was ich will, ist ein System definiert Schriftgröße für NormalFontSize zu bekommen. (Wenn das erledigt ist, kann ich einen Konverter verwenden wie hier BigFontSize und SmallFontSize relativ zu NormalFontSize)


Clue:

fand ich aus der Dokumentation, dass Standardschriftgröße in eine statische Eigenschaft (double) SystemFonts.MessageFontSize gespeichert ist. Aber was soll ich tun, diesen Wert auf Ressourcenverzeichnis abzurufen? (Ich weiß, Binding oder DynamicResource nicht angewandt werden kann. Aber hey, das ist ein statischer Wert, so wie kann ich mich bewerben StaticResource oder x:Static oder was auch immer?)

Ich habe versucht,

<sys:Double x:Key="XXXFontSize">
    <StaticResource ResourceKey="SystemFonts.MessageFontSize" />
</sys:Double>

und

<sys:Double x:Key="XXXFontSize">
    <x:Static ResourceKey="SystemFonts.MessageFontSize" />
</sys:Double>

Beide, die nicht zur Arbeit erscheinen (wie erwartet). Ich erhalte eine Fehlermeldung, dass Cannot add content to object of type 'System.Double'.

Hinweis:

  • Ich mag nicht, diese von Code zu tun, beispiel aus dem App (). (Ist es möglich, einen Code-behind für Resource haben?)
  • Ich möchte nicht, diese in generali Stil verkapseln, von denen andere Arten abgeleitet werden kann (mit BasedOn), weil ich mehrere Ressourcen Wörterbücher haben, und es wird nicht möglich sein, DynamicResource zu verwenden, um mit BasedOn
    Das heißt, ich kann nicht verwenden

    <Style x:Key="BigFont" TargetType="{x:Type Control}"}>
        <Setter Property="Control.FontSize" 
                Value="{Binding Source={x:Static SystemFonts.MessageFontSize},
                                Converter={ . . . }" />
    </Style>
    

    Weil, wenn ich einen Stil in anderen Resource haben, HeaderTextBlockStyle sagen, dann würde ich auf den Einsatz BasedOn={DynamicResource BigFont} haben, die nicht möglich ist (glaube ich)

Jede Hilfe wäre sehr geschätzt.
Danke.

TAGS : WPF SystemFonts.MessageFontSize Resourcefontsize BasedOn Dynamic

War es hilfreich?

Lösung

Ich habe so gemacht ...

public partial class GlobalResources : ResourceDictionary
{
    public GlobalResources()
    {
        this.Add("GiantFontSize", SystemFonts.MessageFontSize * 2.5);
        this.Add("BigFontSize", SystemFonts.MessageFontSize * 1.5);
        this.Add("MediumFontSize", SystemFonts.MessageFontSize * 1.25);
        this.Add("NormalFontSize", SystemFonts.MessageFontSize);
        this.Add("SmallFontSize", SystemFonts.MessageFontSize * 0.85);
    }
}

... und es funktioniert wie ein Wunder !!! Ich kann diese Ressourcen in dem gleichen (teilweise) Ressourcenverzeichnis oder von anderen Ressourcen Wörterbücher wie diese ...

<Style ...>
    <Setter Property="FontSize"
            Value="{DynamicResource MediumFontSize}" />

    ...

</Style>

Ich weiß nicht, ob es eine „gute Praxis“ ist oder nicht (bitte Kommentar zu diesem Thema), ich weiß nur, dass es funktioniert .. !!!

Andere Tipps

Schauen Sie sich diesen Artikel: außer Kraft setzen Standardstile kann es haben, was Sie suchen.

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