在XAML WPF中动态创建文本块和文本框

本文关键字:文本 创建 动态 XAML WPF | 更新日期: 2023-09-27 18:15:53

我的问题是我有一个网格,其中TextBlockTextBox的数量将根据ComboBoxSelectedItem的变化而变化

所以,我想要的是,我写了一个函数来获取TextBlockTextBox的详细信息。

c#函数

public void GetAdditionalAttributes()
{
    using (Entities _entities = new Entities())
    {
        var attributeAll = (from c in _entities.AdditionalAttributeValues
                            where c.DeviceID == 35
                            select new AttributesClass { AttributeValue = c.AdditionalAttributeValue1, AttributeName = c.AdditionalAttribute.Name }).ToList();
        DeviceAttributes = new ObservableCollection<AttributesClass>(attributeAll);
    }
}

现在在XAML中我正在尝试:

<Style x:Key="AdditionalAttributeDisplay"
        TargetType="Grid"
        x:Name="AdditionalAttributeDisplay"
        >
    <Style.Resources>
        <Style TargetType="ItemsControl">
                <Setter Property="ItemsSource"
                    Value="{Binding DeviceAttributes}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding SelectedValue, ElementName=DeviceTypeComboBox}"
                                Value="1">
                    <Setter Property="ItemsSource"
                            Value="{Binding DeviceAttributes}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Style.Resources>
</Style>

但我不知道如何创建TextBlockTextBoxItemSource绑定

在XAML WPF中动态创建文本块和文本框

您可以更改ItemsControlItemTemplate

  <Style TargetType="ItemsControl">
     <Setter Property="ItemTemplate">
         <Setter.Value>
             <ItemContainerTemplate>
                 <Grid>
                     <TextBox Width="100" Height="20" Text={Binding AttributeName}/>
                 </Grid>
             </ItemContainerTemplate>
         </Setter.Value>
     </Setter>
  </Style>

在上面的代码片段中将PropertyName替换为DeviceAttributes成员