StackPanel的可见性取决于组合框的选择

本文关键字:选择 组合 取决于 可见性 StackPanel | 更新日期: 2023-09-27 18:25:51

我想要一个StackPanel,它的可见性应该取决于组合框的选择。不幸的是,下面的XAML不起作用。

我找到了一个具有新属性的解决方案,该属性将在组合框选择的PropertyChanged事件上设置,不过我更喜欢使用严格的XAML解决方案。

关于如何解决这个问题,有什么提示吗?

<StackPanel>
    <Label>Picture in Picture function</Label>
    <ComboBox Name="cbPictureInPicture" ItemsSource="{Binding Path=PictureInPictureCodeList, Mode=OneWay}" DisplayMemberPath="CodeText"
        SelectedValuePath="CodeID" SelectedValue="{Binding Path=PictureInPicture, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
<StackPanel>
    <StackPanel.Style>
        <Style TargetType="StackPanel">
            <Setter Property="Visibility" Value="Visible" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=cbPictureInPicture, Path=IsSelected.CodeText}" Value="Yes">
                    <Setter Property="Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </StackPanel.Style>
    <Label>Picture in Picture is used</Label>
    (...)
</StackPanel>

StackPanel的可见性取决于组合框的选择

您可能会重写与相同的内容

<DataTrigger Binding="{Binding ElementName=cbPictureInPicture, Path=SelectedItem.CodeText}" Value="Yes">
    <Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>

假设组合框绑定到其项具有CodeText属性的集合。因此SelectedItem.CodeText将指向相同的。

另外可能不需要设置CCD_ 1,因为它是默认值。在这种情况下,它没有任何效果,只是可以删除一些额外的代码行。

您也可以使用转换器并直接绑定到PictureInPicture属性:

<StackPanel  Visibility="{Binding PictureInPicture, Converter={StaticResource myVisibilityConverter}}"/>
    <Label>Picture in Picture is used</Label>
    (...)
</StackPanel>
  1. 创建标志并在stackpanel可见性转换器中传递此标志
  2. 基于转换器中的标志,使决策堆栈面板可见/隐藏任何内容
  3. 如果根据您的要求选择值,请在组合框选择更改事件中设置此平面