.net - 使用 WPF 根据绑定(bind)属性动态显示控件

标签 .net wpf

我有一个属性是数据库数据类型( charDateTimeintfloat 等...),我想更改用于输入所选类型值的控件。所以对于文本值,我想要一个 TextBox对于日期值,我想要 DatePicker .

我想到的一种方法是在我的表单上设置每个控件并设置它们的Visibility使用适当的 IValueConverter执行。我知道这会起作用,但它会创建很多代码并且感觉不是很好。

我认为的另一种方法是使用 ContentPresenter并将其内容设置为 StyleDataTriggers但我无法让它工作。

<Style x:Key="TypedValueHelper" TargetType="{x:Type ContentPresenter}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=DataType}" Value="Char">
            <Setter Property="Content" Value="???"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=DataType}" Value="Date">
            <Setter Property="Content" Value="???"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=DataType}" Value="Integer">
            <Setter Property="Content" Value="???"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

如果有人可以填写我的 “???” 或提供更好的解决方案请做。

最佳答案

您可以将样式与 setter 和 DataTemplates 结合使用。你的代码中基本上有它的开始,虽然我不认为 ContentPresenter是正确的样式控件,因为它没有模板。

创建这样的样式:

<Style x:Key="TypedValueHelper" TargetType="{x:Type ContentControl}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=DataType}" Value="Char">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <TextBox Text="{Binding Path=.}" />
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=DataType}" Value="Integer">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <Slider Maximum="100" Minimum="0" Value="{Binding Path=.}"
                                         Orientation="Horizontal" />
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

然后使用 ContentControl 中的样式:
<ContentControl Content="{Binding MyValue}"
                        Style="{StaticResource TypedValueHelper}">

关于.net - 使用 WPF 根据绑定(bind)属性动态显示控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2911626/

相关文章:

c# - Entity Framework Code First 多对多关系与附加信息

.net - Pex 重新生成和 PexA assumeNotNull

asp.net - 将 .Net 1.1 网站转换为 4.0

c# - SQL Server 行版本

wpf - 数据绑定(bind)和锁定列表

c# - XAML 样式属性未被继承

wpf - 拉伸(stretch) wpf 选项卡控件内容

c# - 将 Viewbag 元素 (int) 传递到列表集合索引中

c# - WPF DataGrid 中的图像列

c# - 单击行为后的 wpf 按钮