【问题标题】:WPF - Conditional visibility with ComboBoxWPF - 组合框的条件可见性
【发布时间】:2017-08-11 11:50:49
【问题描述】:

我是 WPF(和一般的 .Net)的新手。我有 2 个 ComboBox 并想用第一个控制第二个的可见性:

如果在左侧组合框中选择“Uno”,右侧组合框将被隐藏。

这是我的 XAML:

<Window x:Class="WpfApp1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp1"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <ComboBox x:Name="Left" HorizontalAlignment="Left" Margin="66,47,0,0" VerticalAlignment="Top" Width="120">
        <ComboBoxItem Content="Uno"></ComboBoxItem>
        <ComboBoxItem Content="Dos"></ComboBoxItem>
    </ComboBox>
    <ComboBox x:Name="Right" HorizontalAlignment="Left" Margin="326,47,0,0" VerticalAlignment="Top" Width="120">
        <Style TargetType="ComboBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=Left, Path=SelectedItem}" Value="Uno">
                    <Setter Property="Visibility" Value="Hidden"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox>

</Grid>

我也试过了

<DataTrigger Binding="{Binding ElementName=Left, Path=SelectedIndex}" Value="0">
       <Setter Property="Visibility" Value="Hidden"></Setter>
</DataTrigger>

感谢您的帮助和时间

【问题讨论】:

    标签: wpf xaml data-binding combobox wpf-controls


    【解决方案1】:

    只需设置右边ComboBoxStyle属性并绑定到SelectedItem.Content即可:

    <ComboBox x:Name="Right" HorizontalAlignment="Left" Margin="326,47,0,0" VerticalAlignment="Top" Width="120">
        <ComboBox.Style>
            <Style TargetType="ComboBox">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=Left, Path=SelectedItem.Content}" Value="Uno">
                        <Setter Property="Visibility" Value="Hidden"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ComboBox.Style>
    </ComboBox>
    

    【讨论】:

      【解决方案2】:
      <Grid>
          <Grid.Resources>
              <local:IntToVisibilityConverter x:Key="IntToVisibilityConverter" />
          </Grid.Resources>
      
          <ComboBox x:Name="Left" HorizontalAlignment="Left" Margin="66,47,0,0" VerticalAlignment="Top" Width="120">
              <ComboBoxItem Content="Uno"></ComboBoxItem>
              <ComboBoxItem Content="Dos"></ComboBoxItem>
          </ComboBox>
      
          <ComboBox x:Name="Right" HorizontalAlignment="Left" Margin="326,47,0,0" VerticalAlignment="Top" Width="120"  Visibility="{Binding ElementName=Left, Path=SelectedIndex,Converter={StaticResource IntToVisibilityConverter}}">
          </ComboBox>
      </Grid>
      
      public class IntToVisibilityConverter: IValueConverter
      {
         /// <summary>
         ///  Used to Convert a value
         /// </summary>
         public object Convert(object value, Type targetType, object parameter, string language)
         {
             int index= (int)value;
             return index==0? Visibility.Hidden : Visibility.Visible;
         }
      
         /// <summary>
         ///  Inverse of Convert method
         /// </summary>
         public object ConvertBack(object value, Type targetType, object parameter, string language)
         {
             throw new NotImplementedException();
         }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-07
        • 2017-11-14
        • 2019-08-17
        • 1970-01-01
        • 2020-04-07
        • 2011-10-12
        • 2011-10-22
        • 2011-10-03
        相关资源
        最近更新 更多