绑定按钮IsEnabled到StackPanel有孩子

时间:2011-05-16 20:47:32

标签: wpf button binding stackpanel isenabled

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

3 个答案:

答案 0 :(得分: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来解决这个问题(它几乎就像{{1}默认情况下):

StackPanel

答案 1 :(得分:2)

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

答案 2 :(得分:0)

比HB更简单的解决方案(不需要ItemsPanel)可能绑定到ActualHeight的{​​{1}}属性,因为如果没有子节点,它的大小将为0。

StackPanel

如果<Style.Triggers> <DataTrigger Binding="{Binding ElementName=sp, Path=ActualHeight}" Value="0"> <Setter Property="IsEnabled" Value="False"/> </DataTrigger> </Style.Triggers> 没有正确收缩,则可能必须使用VerticalAlignment="Top"