Wie ändere ich NUR den rechten (oder linken, oberen, unteren) Wert der Margin-Eigenschaft eines WPF-Steuerelements?

8

Dies ist ziemlich einfach von Code-Behind zu tun:

%Vor%

In XAML beschränke ich mich jedoch auf Folgendes:

%Vor%

Das Problem dabei ist, dass ich jetzt die anderen Randwerte (d. h. links, oben, unten) potenziell überschrieben habe, indem ich sie auf Null gesetzt habe.

Gibt es eine Möglichkeit, XAML wie folgt zu haben?

%Vor%     
bugged87 28.09.2012, 00:42
quelle

4 Antworten

7

Eine angehängte Eigenschaft könnte verwendet werden. Tatsächlich ist dies genau der Zweck von angefügten Eigenschaften: Zugreifen auf Elternelementeigenschaften oder Hinzufügen zusätzlicher Funktionalität zu einem bestimmten Element.

Definieren Sie zum Beispiel die folgende Klasse irgendwo in Ihrer Anwendung:

%Vor%

Nun müssen Sie in Ihrem XAML nur den folgenden Namespace deklarieren:

%Vor%

Und dann können Sie XAML wie folgt schreiben:

%Vor%


Alternativ können Sie vermeiden, eine angefügte Eigenschaft zu verwenden und stattdessen ein etwas längeres XAML wie:

zu schreiben

<Button>
<Button.Margin>
<Thickness Right="10" />
</Button.Margin>
</Button>

    
bugged87 28.09.2012, 00:42
quelle
1

Obwohl eine angebaute Eigenschaft funktionieren kann. Ich würde versuchen, Ihren Code umzuformatieren, damit Sie keine Änderungen an der Benutzeroberfläche im Code vornehmen. Sie sollten so viel von der Benutzeroberfläche handhaben, wie Sie in der Entwurfsseite der Datei können. Ich versuche, das Codebehind von XAML-Dateien so wenig wie möglich zu verwenden, weil es Probleme mit MVVM verursacht.

    
kbo4sho88 28.09.2012 04:11
quelle
1

Sie könnten den Rand an eine Eigenschaft (Zeichenfolge) in Ihrem MVVM binden. In Ihrem MVVM müssen Sie lediglich die einzelnen Eigenschaften (oben, rechts, unten, rechts) verfolgen.

Sie können Konverter wie in: verwenden oberer Rand nur in XAML? oder Binding nur ein Teil der Margin-Eigenschaft von WPF-Steuerelement

    
Patrice Calvé 28.09.2012 11:49
quelle
0

Sie liegen falsch mit diesem Teil:

%Vor%
  

Fehler CS1612: Kann den Rückgabewert von nicht ändern   'System.Windows.FrameworkElement.Margin', weil es keine Variable ist

Ist bereits kein gültiger Code, weil Margin ein struct zurückgibt und es ist daher ein Werttyp. Und weil es nicht von DependencyObject abgeleitet ist, funktionieren auch viele DataBinding-Tricks nicht.

Ich wollte nur eine richtige Erklärung geben, sonst würde ich sagen, dass Ihre erste Antwort so ziemlich der einzige Weg ist.

    
dowhilefor 28.09.2012 01:26
quelle