c# - 如何针对特定条件扩展 WPF 窗口?

标签 c# wpf visual-studio xaml combobox

我有一个只有 ComboBox(下拉列表)的 WPF 窗口。如果我选择索引 1(下拉列表中的第二项),我如何扩展 WPF 窗口以显示更多按钮、文本框等?我需要使用 selectedIndex 属性吗?如果是这样,我如何使窗口在 XAML 中扩展。

最佳答案

我过去曾使用 IValueConverter 来完成此操作。这是一个示例转换器:

public class MyConverter : System.Windows.Data.IValueConverter {

    public object Convert ( object value , Type targetType , object parameter , CultureInfo culture ) {

        if ( value == null )
            return System.Windows.Visibility.Hidden;

        if ( parameter == null )
            return System.Windows.Visibility.Hidden;

        if ( value.ToString().Equals ( parameter ) )
            return System.Windows.Visibility.Visible;

        return System.Windows.Visibility.Hidden;
    }

    public object ConvertBack ( object value , Type targetType , object parameter , CultureInfo culture ) {
        throw new NotImplementedException ( );
    }
}

它所做的是,它采用传递给它的值,我期待一个数字,例如项目控件的 SelectedIndex。然后我将它与传递的参数进行比较。如果它们相等,我返回 Visibility.Visible。在所有其他情况下,我返回 Visibility.Hidden。

现在,您可以像这样将其插入 XAML:

<Window x:Class="WpfApplication1.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:WpfApplication1"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <local:MyConverter x:Key="vConv"/>
    </Window.Resources>
    <Grid>
        <ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="25,52,0,0" VerticalAlignment="Top" Width="120">
            <ComboBoxItem>Hidden</ComboBoxItem>
            <ComboBoxItem>Visible</ComboBoxItem>
        </ComboBox>

        <Label x:Name="label" Content="Label" HorizontalAlignment="Left" Margin="219,92,0,0" VerticalAlignment="Top" Visibility="{Binding ElementName=comboBox, Path=SelectedIndex, Converter={StaticResource vConv}, ConverterParameter=1, UpdateSourceTrigger=PropertyChanged}"/>

    </Grid>
</Window>

您可以看到我们在 Window.Resources 中创建了 MyConverter 类的实例。当我们在绑定(bind)中使用它时,我们可以根据选择的任何索引显示/隐藏我的标签。现在这是非常基本的,您可以向其中添加很多内容以获得您需要的所有功能,但这应该让您入门。

关于c# - 如何针对特定条件扩展 WPF 窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42016687/

相关文章:

c# - 用于在 Visual Studio 中创建构造函数的代码片段或快捷方式

c# - 识别手写形状

c# - 限制 MDI 应用程序中的窗口实例数

c# - 如何在区间条形图中绘制水平线和垂直线 - oxyplot - WPF

c# - 如何在 App.xaml 文件的 Application.Resources 中组合 LocalizedStrings 和 ResourceDictionary 标签

c# - 有没有办法做到这一点,在 List<T>.ForEach() 语句中分配一个值?

WPF/XAML 在具有数据绑定(bind)和高级模板的 TreeView 中使用 TreeViewItems

c# - WPF:如果 TextBox 中的文本发生更改,则更新按钮

visual-studio - 在visual studio中是否有选择方法体的快捷键(有或没有resharper)

visual-studio - 将 Visual Studio 2013 解决方案升级到 Visual Studio 2015