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