WPF-Tasten gleiche / empfohlene Breite

8

Angenommen, Sie haben ein Fenster mit mehreren Schaltflächen wie Ok / Abbrechen oder Ja / Nein / Abbrechen. Alle Tasten müssen die gleiche Breite haben. Offensichtlich könnte dies getan werden, indem man einfach eine Nummer erraten und alle auf diese Nummer festverdrahten.

Gibt es einen besseren Weg, dies zu tun, einen, der die bevorzugten / empfohlenen Größen berücksichtigt (wie groß sollte ein Ok-Button eigentlich sein? Das ist keine rhetorische Frage, ich kenne die Antwort eigentlich nicht!) , was wird vom Text der längsten Überschrift benötigt, was passiert, wenn die Schriftgröße erhöht wird usw.?

    
rwallace 17.04.2010, 13:36
quelle

6 Antworten

9

Es gibt mehrere Möglichkeiten, dies zu tun:

1) Verwenden Sie ein Raster für das Layout. Jede Schaltfläche erhält eine eigene Spalte, die Sterngröße hat. Auf diese Weise haben alle Spalten die gleiche Größe:

%Vor%

2) Sie können ein Element als "Master-Größe" definieren und die Breite aller anderen Elemente an die Breite dieses Elements binden.

%Vor%

BEARBEITEN: Im tatsächlichen Code wird wahrscheinlich Width="Auto" sein. Da die anderen Breiten auf der "Hauptbreite" basieren, sollte die Schaltfläche mit der breitesten Breite (breitester Text) gewählt werden.

    
Daniel Rose 17.04.2010, 14:01
quelle
7

Eine andere, vielleicht einfachere Möglichkeit, dies zu tun, ist die Verwendung der SharedSizeGroup Eigenschaft auf der ColumnDefinition und RowDefinition Klassen.

Spalten (und Zeilen) in einem WPF-Grid können automatisch an ihren Inhalt angepasst werden - wenn SharedSizeGroup verwendet wird, teilen Spalten mit demselben Gruppennamen ihre Größenänderungslogik.

Der Xaml würde ungefähr so ​​aussehen ...

%Vor%     
Bevan 18.07.2011 00:24
quelle
4

Verwenden Sie ein "Master" -Steuerelement, wie in Daniels Antwort, aber binden Sie an das Attribut "ActualWidth" anstelle von "Width":

%Vor%

Auf diese Weise wird der Wert zur Laufzeit aus der Hauptsteuerung genommen, nachdem die minimale und maximale Breite und alle anderen Layoutberechnungen berücksichtigt wurden. Die Bindung an "Width" bindet an alles, was Sie zur Kompilierungszeit in das Attribut eingeben, was möglicherweise nicht die tatsächlich verwendete Breite ist.

Auch die Bindung kann kürzer geschrieben werden wie

%Vor%     
Alexander Rautenberg 07.02.2011 09:44
quelle
2

Gemäß den MS User Experience Interaction Guidelines für Windows 7 und Windows Vista (p61) sind Standardabmessungen für Befehlsschaltflächen 50x14 DLU tatsächliche Größe (75x23 Pixel). Die Richtlinien empfehlen weiter, dass Sie versuchen, mit [diesen] Standardbreiten und -höhen zu arbeiten. Wenn Sie mehr Breite benötigen, um zu einem klaren Etikett zu passen, nehmen Sie mehr Breite.

    
Michael Zuschlag 19.04.2010 11:34
quelle
0

Im allgemeinsten Fall möchten Sie eine erstellen Stil in Ihrer Sektion, dann wenden Sie diesen Stil wie gewünscht an. Wenn Sie nun den Stil ändern, ändern sich alle Schaltflächen.

Oder Sie können den Inhalt der Schaltfläche ändern, sodass sie automatisch auf den Text passt.

    
Dave 17.04.2010 13:48
quelle
0

Diese Antworten sind großartig, wenn Sie eine feste Zahl oder ein festes Layout für die Schaltflächen haben, aber wenn es wie ich eine dynamische Anzahl von Schaltflächen aus einer Bindung gibt, die in ItemsControl enthalten sind, ist dies nicht möglich. Aber es gibt einen einfachen Weg und es verwendet immer noch die sharedsize-Eigenschaft von Grid.

DataTemplate:

%Vor%

Übergeordneter Container:

%Vor%

Im Wesentlichen kann der Inhalt der Schaltfläche selbst ein Gird sein, in dem Sie Ihre Beschriftungen und Symbole nach Bedarf platzieren können. Obwohl sich die Schaltflächen nicht im selben Raster befinden (sie sind jeweils ihre eigenen), kann das Raster sie dennoch teilen Größe, solange Sie die Eigenschaft ItemsControl des Stammcontainers von Grid.IsSharedSizeScope auf True setzen.

Dies bewirkt, dass das Inhaltsraster der einzelnen Schaltflächen auf der Grundlage der größten identisch ist, ohne die Schaltflächen selbst in einem vordefinierten Raster zu haben.

    
Wobbles 23.03.2016 13:44
quelle

Tags und Links