Ich habe ein einfaches WPF-Formular mit einem Grid
auf dem Formular deklarierten. Dies Grid
hat eine Reihe von Zeilen:
<Grid.RowDefinitions>
<RowDefinition Height="Auto" MinHeight="30" />
<RowDefinition Height="Auto" Name="rowToHide" />
<RowDefinition Height="Auto" MinHeight="30" />
</Grid.RowDefinitions>
Die genannte Zeile rowToHide
enthält einige Eingabefelder. Ich möchte diese Zeile ausblenden, nachdem ich festgestellt habe, dass ich diese Felder nicht benötige. Es ist einfach genug, nur Visibility = Hidden
alle Elemente in der Zeile festzulegen, aber die Zeile nimmt immer noch Platz in der Zeile ein Grid
. Ich habe versucht Height = 0
, die Elemente einzustellen, aber das schien nicht zu funktionieren.
Sie können sich das so vorstellen: Sie haben ein Formular, in dem sich ein Dropdown-Menü mit der Aufschrift "Zahlungsart" befindet. Wenn die Person "Bargeld" auswählt, möchten Sie die Zeile mit den Kartendetails ausblenden. Es ist keine Option, das Formular mit diesem bereits ausgeblendeten zu starten.
Antworten:
Row hat keine Visibility-Eigenschaft. Wie andere bereits gesagt haben, müssen Sie die Höhe festlegen. Eine andere Möglichkeit ist die Verwendung eines Konverters, falls Sie diese Funktionalität in vielen Ansichten benötigen:
Und dann in der entsprechenden Ansicht
<Grid.RowDefinition>
:quelle
BoolToGridLengthConverter
und eineVisibleLength
Eigenschaft hinzuzufügen, um fortzufahren(bool)value == true
. So können Sie es auch mitAuto
und jedem Fix-Wert wiederverwenden .Die beste und sauberste Lösung zum Reduzieren von Zeilen oder Spalten ist die Verwendung eines DataTriggers. In Ihrem Fall also:
quelle
INotifyPropertyChanged
in Ihren Code dahinter zu implementieren, damit er funktioniert, wenn erSomeBoolProperty
geändert wird :).Sie können dies auch tun, indem Sie auf die Zeile im Raster verweisen und dann die Höhe der Zeile selbst ändern.
XAML
VB.NET
Das Reduzieren der Elemente im Raster funktioniert zwar auch, dies ist jedoch etwas einfacher, wenn Sie viele Elemente im Raster haben, die kein umschließendes Element enthalten, das reduziert werden kann. Dies wäre eine gute Alternative.
quelle
RowDefinition
, wie<RowDefinition Height="*" /><!-- Height set in code behind -->
Als Referenz
Visibility
dient eine System.Windows.Visibility- Aufzählung mit drei Zuständen :Siehe diesen Tipp und andere Tipps im WPF- Thread mit Tipps und Tricks .
quelle
Anstatt mit der Rasterzeile herumzuspielen, können Sie die Visibility-Eigenschaft der Steuerelemente (Felder in der Zeile) auf "Reduziert" setzen. Dadurch wird sichergestellt, dass die Steuerelemente keinen Platz beanspruchen. Wenn Sie die Rasterzeilenhöhe = "Auto" haben, wird die Zeile ausgeblendet, da alle Steuerelemente in der Zeile Sichtbarkeit = "Reduziert" haben.
Diese Methode ist besser, da die Sichtbarkeit der Steuerelemente mithilfe eines Konverters an eine Eigenschaft gebunden werden kann.
quelle
Mach das einfach:
rowToHide.Height = new GridLength(0);
Wenn Sie verwenden,
visibility.Collapse
müssen Sie es für jedes Mitglied der Zeile festlegen.quelle
Stellen Sie die Sichtbarkeit des Inhalts der Zeile auf "
Visibility.Collapsed
Ausgeblendet" ein. Dadurch nimmt der Inhalt keinen Platz mehr ein und die Zeile wird entsprechend verkleinert.quelle
Ich hatte eine ähnliche Idee, als ich RowDefinition erbte (nur aus Interesse)
Jetzt können Sie es wie folgt verwenden:
und umschalten mit
quelle