【问题标题】:StackPanel visibility depending on Combobox selectionStackPanel 可见性取决于 Combobox 选择
【发布时间】:2023-03-23 15:35:01
【问题描述】:

我想要一个 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>

【问题讨论】:

    标签: c# wpf xaml mvvm combobox


    【解决方案1】:

    你也许可以重写

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

    假设组合框绑定到其项目具有 CodeText 属性的集合。所以 SelectedItem.CodeText 会指向同一个。

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

    【讨论】:

    • 我使用 IsSelected 而不是 SelectedItem。感谢您的提示!
    • 太好了!快乐编码:)
    【解决方案2】:

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

    <StackPanel  Visibility="{Binding PictureInPicture, Converter={StaticResource myVisibilityConverter}}"/>
        <Label>Picture in Picture is used</Label>
        (...)
    </StackPanel>
    

    【讨论】:

    • 我试过了,但是转换器只在打开视图时被调用?
    • @MwBakker,可能绑定模式设置为OneTime,将其替换为Binding PictureInPicture, Converter={StaticResource myVisibilityConverter}, Mode=OneWay,并且每次PictureInPicture更改时都应该调用它,假设它实现了INotifyPropertyChanged
    【解决方案3】:
    1. 创建标志并在堆栈面板可见性转换器中传递此标志。
    2. 根据转换器中的标志使决策堆栈面板可见/隐藏任何内容
    3. 如果根据您的要求选择值,请在组合框选择更改事件中设置此平面。

    【讨论】:

      猜你喜欢
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 2012-10-18
      • 2020-10-30
      • 1970-01-01
      相关资源
      最近更新 更多