代码之家  ›  专栏  ›  技术社区  ›  HEDMON

WPF-具有组合框的条件可见性

  •  1
  • HEDMON  · 技术社区  · 8 年前

    我是WPF(和.Net)的新手。我有2个组合框,想要用第一个控制第二个的可见性:

    这是我的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>
    

    谢谢你的帮助和时间

    2 回复  |  直到 8 年前
        1
  •  4
  •   mm8    8 年前

    只需设置 Style 权利的性质 ComboBox 并绑定到 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
  •  1
  •   Manfred Radlwimmer Michael Canan    8 年前
    <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();
       }
    }
    
    推荐文章