繁体   English   中英

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

[英]StackPanel visibility depending on Combobox selection

我想让一个StackPanel的可见性取决于Combobox的选择。 不幸的是,下面的XAML无法正常工作。

我找到了一个具有新属性的解决方案,该解决方案将在Combobox选择项的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>

您可能会改写为

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

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

另外,可能不需要设置<Setter Property="Visibility" Value="Visible" />因为它是默认值。 在这种情况下,它没有任何作用,只是可以删除一些额外的代码行。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM