3

我想知道我是否可以将我的 Button isEnabled 绑定到我的 StackPanel Children(有孩子)。如果堆栈面板有孩子,那么我的按钮被启用,没有孩子我的按钮被禁用。目前我只是在代码中处理这个,但我开始想知道这是否是我可以绑定的。感谢您的任何想法...

4

3 回答 3

6

实际上,由于您处理的是 bool,因此您可以反转逻辑并在没有转换器的情况下执行此操作:

<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>

使用它你会在获取更新方面遇到一些问题,因为Children.Count它不是 DP,你可以使用ItemsControl虽然来解决这个问题(默认情况下它的行为几乎像 a StackPanel):

<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>
于 2011-05-16T21:39:26.120 回答
2

您可以编写一个简单的 ValueConverter 来为您执行该逻辑。将按钮的 IsEnabled 绑定到 StackPanel 并在您的值转换器中检查它是否有任何子项,然后返回 true/false。

于 2011-05-16T20:48:52.767 回答
0

比 HB更简单的解决方案(不需要ItemsPanel)可能会绑定到 的ActualHeight属性StackPanel,因为如果不存在子级,它的大小将为 0。

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

如果它没有正确收缩,VerticalAlignment="Top"您可能必须使用。StackPanel

于 2012-05-31T09:20:47.743 回答