C# 文本框/复选框的数据触发器类型/

C# 文本框/复选框的数据触发器类型/,c#,wpf,reflection,datatrigger,C#,Wpf,Reflection,Datatrigger,我有一个ItemsControl,其中显示不同的属性和值,一边是名称,另一边是文本框。ItemsSource是自定义类的对象集合,具有名称、值和PropertyType属性(使用反射propertyinfo) 现在我想通过检测属性是否为bool类型来改进这一点,例如,它将显示一个复选框而不是一个文本框。这是否可能使用DataTrigger 我使用一个控件使其半工作,我根据类型将模板设置为文本框或复选框,但当我尝试将“tab”设置为下一个文本框或复选框时,它会首先聚焦具有文本框/复选框的控件,只有

我有一个ItemsControl,其中显示不同的属性和值,一边是名称,另一边是文本框。ItemsSource是自定义类的对象集合,具有名称、值和PropertyType属性(使用反射propertyinfo)

现在我想通过检测属性是否为bool类型来改进这一点,例如,它将显示一个复选框而不是一个文本框。这是否可能使用DataTrigger

我使用一个控件使其半工作,我根据类型将模板设置为文本框或复选框,但当我尝试将“tab”设置为下一个文本框或复选框时,它会首先聚焦具有文本框/复选框的控件,只有在另一个“tab”之后,它才会聚焦包含文本框/复选框的控件


因此,如果有人知道这方面的解决方案,我们将不胜感激

您可以使用DataTemplate根据值属性类型选择不同的视图

视图:


使用您已有的解决方案,并将错误获取选项卡焦点的控件的属性设置为false。

我最近遇到了一个类似的问题,我想在控件中显示一个文本框(如果bool为false),在控件中显示一个文本块(如果bool为true)。我把文本框和文本块都放在我想显示的地方。然后,我将每个的Visible属性绑定到布尔值。如果你认为这是你的sltn,我可以发布代码。这正是我想要的,我怎么可能没有看到这么简单的东西。非常感谢!:)
<ItemsControl ItemsSource="{Binding Path=Options}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <DataTemplate.Resources>
                        <DataTemplate DataType="{x:Type System:Boolean}">
                            <CheckBox IsChecked="{Binding Path=.}"/>
                        </DataTemplate>
                        <DataTemplate DataType="{x:Type System:String}">
                            <TextBox Text="{Binding Path=.}"/>
                        </DataTemplate>
                    </DataTemplate.Resources>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Path=Name, Mode=OneWay}"/>
                        <ContentControl Content="{Binding Path=Value}"/>
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
public class MainViewModel
{
    public ArrayList Options { get; set; }

    public MainViewModel()
    {
        Options = new ArrayList();
        Options.Add(new TextProperty());
        Options.Add(new BoolProperty());
    }

}

public class TextProperty
{
    public string Name { get; set; }

    public string Value { get; set; }

    public TextProperty()
    {
        Name = "Name";
        Value = "Default";
    }
}

public class BoolProperty
{
    public string Name { get; set; }

    public bool Value { get; set; }

    public BoolProperty()
    {
        Name = "IsEnabled";
        Value = true;
    }
}