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

有帮助吗?

解决方案

实际上,由于您处理的是 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 尽管为了解决这个问题(它的行为几乎就像 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>

其他提示

您可以编写一个简单的值符号,为您提供该逻辑。将按钮的insenabled绑定到StackPanel,在您的值转换器中检查它是否有任何子项,然后返回True / False。

更简单的解决方案(不需要世代odicetagcode),而不是H.B.可能是与世代odicetagcode的ItemsPanel属性绑定,因为如果没有孩子,其大小将是0。

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

如果如果它不正确缩小,则可能必须为生成的ActualHeight使用for StackPanel

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top