【问题标题】:Creating controls dynamically using xaml使用 xaml 动态创建控件
【发布时间】:2015-01-22 11:34:01
【问题描述】:

我的应用程序中有一个对象列表,我想使用它动态创建 Wrappanels。一种方法是在后面的代码中编写控件,如下所示。

WrapPanel RuleInternalCond = new WrapPanel();

// Create operator combo box and fill all operators
ComboBox operatorCb = new ComboBox();
operatorCb.Items.Add("OR");
operatorCb.Items.Add("AND");

RuleInternalCond.Children.Add(operatorCb);

但是有没有更好的方法来创建包装面板的模板,将其绑定到我的属性并使用我在 xaml 中的集合来自动创建包装面板模板列表?

详细解释。 我想创建一个包装面板,其中包含绑定到属性的 xaml 控件。但是,如果我想根据我的收藏动态创建这些包装面板的列表,就会出现问题。例如,我的收藏是

列表 = 新列表 MyRules 在哪里

字符串名称; 字符串条件;

我希望列表项位于 WrapPanel 中,TextBox 的名称和条件为

【问题讨论】:

  • 简单回答:是的。进一步:不清楚你在问什么。您能否展示第二个元素并清楚说明哪些部分应该是动态的
  • 你可以动态生成 xaml 并使用 System.Windows.Markup.XamlReader.Load
  • 如果这是ObservableCollection,则使用ListViewListBox 或任何其他ItemsControl,然后为集合中的每个项目定义DataTemplate。但是,如果集合不是 ObservableCollection,则在 XAML 中使用 CollectionViewSource。它将使用不实现 INPC 的集合。 HTH
  • @DrKoch 我更新了我的问题

标签: c# wpf xaml


【解决方案1】:

只是一个使用 ItemsControl 的代码示例。我假设您使用具有这 2 个属性的对象,并且您需要使用像 @XAMIMAX 在评论 (ObservableCollection<MyObject> MyList) 中所写的 ObservableCollection。

           <ItemsControl ItemsSource="{Binding MyList}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <WrapPanel>
                            <TextBlock Text="{Binding Name}"/>
                            <TextBlock Text="{Binding Condition}"/>
                        </WrapPanel>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>

【讨论】:

  • 我刚刚得到它 - 我没有将 get 和 set 放在 observableCollection 上。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 2011-06-10
相关资源
最近更新 更多