我需要根据用户在下拉列表中的选择来显示不同的控件。也就是说,如果用户选择日期,则应显示日期选择控件,或者输入文本输入框以进行文本输入...或者选择一组控件以进行更复杂的选择。
因此,我们的想法是创建多少用户控件,然后在所需的时间显示所需的用户控件。我想要一些比'可见真/假'属性更优雅的东西。
答案 0 :(得分:1)
您可以使用内容控制和数据触发器来实现它。无需使用Visibility。
这是一个可以让您清楚了解的示例。 在下面的示例中,我使用组合框选择项作为datacontext进行了内容控制。 XAML代码:
<StackPanel Orientation="Vertical" Width="150">
<ComboBox Name="Controls"></ComboBox>
<ContentControl DataContext="{Binding ElementName=Controls,Path=SelectedItem}">
<ContentControl.Style>
<Style TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="Date">
<Setter Property="Content">
<Setter.Value>
<DatePicker Height="30"></DatePicker>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="Text">
<Setter Property="Content">
<Setter.Value>
<TextBox Height="30"></TextBox>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="Button">
<Setter Property="Content">
<Setter.Value>
<Button Height="30"></Button>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="Checkbox">
<Setter Property="Content">
<Setter.Value>
<CheckBox Height="30"></CheckBox>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</StackPanel>
代码背后:
InitializeComponent();
List<string> controlTypes = new List<string> { "Date", "Text", "Button", "Checkbox" };
Controls.ItemsSource = controlTypes;
注意:对于创建示例我已经使用了代码...您可以轻松地将其转换为MVVM
答案 1 :(得分:0)
我想要比'可见真/假'属性更优雅的东西。
:-)无论如何你都会完成这个......
这太微不足道了......任何体面的WPF相关教程都会帮助你解决这个问题......
只是为了快速入门,您必须使用Binding
ComboBox的SelectedItem
和Visibility
所有要通过适当的值转换器隐藏/显示的控件。