Frage

Ich frage mich, ob ich meinen Button isEnabled an meine StackPanel-Kinder binden kann (hat Kinder).Wenn das Stackpanel untergeordnete Elemente hat, ist meine Schaltfläche aktiviert, keine untergeordneten Elemente, meine Schaltfläche ist deaktiviert.Derzeit handhabe ich das nur im Code, aber ich begann mich zu fragen, ob ich das binden könnte.Vielen Dank für alle Gedanken...

War es hilfreich?

Lösung

Da es sich tatsächlich um einen Bool-Wert handelt, können Sie die Logik umkehren und dies ohne Konverter tun:

<StackPanel Name="sp" />
<Button Content="A Button">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=sp, Path=Children.Count}" Value="0">
                    <Setter Property="IsEnabled" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

Wenn Sie dies verwenden, treten seitdem einige Probleme beim Erhalten von Updates auf Children.Count ist kein DP, Sie können einen verwenden ItemsControl Um das zu umgehen (es verhält sich im Grunde wie ein StackPanel standardmäßig):

<ItemsControl Name="ic" />
<Button Content="A Button">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=ic, Path=Items.Count}" Value="0">
                    <Setter Property="IsEnabled" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

Andere Tipps

Sie könnten einen einfachen ValueConverter schreiben, der diese Logik für Sie tut.Binden Sie den ISenabled der Taste an den Stackpanel und überprüfen Sie in Ihrem Wert Converter, ob er Kinder enthält und dann true / false zurückgibt.

Eine einfachere Lösung (erfordert Nr ItemsPanel), als die von H.B. für die bindend sein könnten ActualHeight Eigentum der StackPanel, da seine Größe 0 ist, wenn keine untergeordneten Elemente vorhanden sind.

<Style.Triggers>
  <DataTrigger Binding="{Binding ElementName=sp, Path=ActualHeight}" Value="0">
    <Setter Property="IsEnabled" Value="False"/>
  </DataTrigger>
</Style.Triggers>

Möglicherweise müssen Sie verwenden VerticalAlignment="Top" für die StackPanel wenn es nicht richtig schrumpft.

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