[xaml] SubProperty über TemplateBinding



  • Hallo,

    ich habe mal wieder eine wahrscheinlich sehr simple Frage. Ich habe
    ein ControlTemplate, in dem die Margin Property einer Border über ein
    TemplateBinding festgelegt wird. Ich möchte nun aber gern nicht die
    komplette Thickness erben, sondern nur die Top, Left und Right Property
    und die Bottom Property selbst festlegen.

    als Pseudocode quasi so :

    <Border.Margin>
        <Thickness Bottom = "3"
                   Left" = {TemplateBinding Margin.Left}"
                   Right= = "{TemplateBinding Margin.Right}"
                   Top = "{TemplateBinding Margin.Top}" />
    </Border.Margin>
    

    ist das möglich ? Wenn ja, wie wäre die korrekte Syntax ?

    ps: ich habe hier kein spezifisches forum für xaml fragen gefunden, ich hoffe
    meine frage findet hier eine heimat :).


  • Administrator

    XAML Fragen gehören hier hin.

    Zu deinem Problem: Wieso willst du die Margin deines Control in deinem ControlTemplate verwenden? Margin wird immer vom Parent verwendet oder vom Grundsystem von WPF. Wenn du somit Margin in deinem ControlTemplate verwendest, wird am Ende tatsächlich der doppelte Wert angewendet (1x vom Parent und 1x von deinem ControlTemplate ).

    Grüssli



  • Dravere schrieb:

    XAML Fragen gehören hier hin.

    Zu deinem Problem: Wieso willst du die Margin deines Control in deinem ControlTemplate verwenden? Margin wird immer vom Parent verwendet oder vom Grundsystem von WPF. Wenn du somit Margin in deinem ControlTemplate verwendest, wird am Ende tatsächlich der doppelte Wert angewendet (1x vom Parent und 1x von deinem ControlTemplate ).

    Grüssli

    hallo,

    gute frage. bei der control handelt es sich um die expander control. das
    template dafür ist schon ein bissel älter. ich habe mal ein bissel mit den
    werten gespielt und dein einwand ist natürlich berechtigt, bzw kann ich mir
    auch nicht erklären, was ich mir damals bei dem template binding gedacht habe.

    ulkigerweise ist mir das nie aufgefallen mit den doppelten margins. das problem
    ist somit praktisch gelöst. theoretisch würde mich die ursprüngliche frage aber
    dennoch weiter interessieren.

    vielen dank für die schnelle antwort 🙂


  • Administrator

    Das was du gezeigt hast, ist so direkt nicht möglich, da Thickness eine Struktur ist. Die Properties dieser Struktur sind ganz normal und man kann an diese nichts binden.

    Du könntest allenfalls den Converter von TemplateBinding verwenden. Dann sähe dies wohl ca. so aus:

    <Border Margin="{TemplateBinding Margin, Converter={StaticResource ReplaceBottomConverterKey}, ConverterParameter=3}">
      ...
    </Border>
    

    Warnhinweis:
    Liebe Kinder, bitte nicht nachmachen 🙂

    Grüssli



  • Nochmals vielen Dank für die Antwort.


Anmelden zum Antworten