WPF: WrapPanel 容器的数据绑定(动态生成控件、遍历)

原文:WPF: WrapPanel 容器的数据绑定(动态生成控件、遍历)

问题:

? ? ? ?有一些CheckBox需要作为选项添加到页面上,但是数目不定。而为了方便排版,我选择用WrapPanel面板来作为父容器。那现在的问题就是如何把这些控件添加到这个WrapPanel里了。我想到了两个方法,第一个是先得到控件数目,然后再动态生成并加载到这个WrapPanel里,第二个是设置数据绑定。我想第一个是可行的,但是项目中还涉及到其它问题,所以这里就选择第二个了。问题来了,在WrapPanel中并没有可以用来设置绑定并实现动态生成的东西,那要怎么解决了?

办法:

新建一个ItemsControl控件,并为ItemsSource绑定数据源,然后把ItemsControl.ItemsPanel设置为WrapPanel,最后为ItemsControl.ItemTemplate中的CheckBox.Content绑定数据。

eg:

1、创建数据源类型。

public class business
 {
    public string txt { get; set; }
 }

?

2、设置数据源

 public MainWindow()
  {
     this.InitializeComponent();
     List<business> che = new List<business>()
     {
        new business() { txt = "选项1"},
        new business() { txt = "选项2"},
        new business() { txt = "选项3"},
        new business() { txt = "选项4"},
        new business() { txt = "选项5"},
        new business() { txt = "选项6"},
        new business() { txt = "选项7"}
     };
     ItemsControl.ItemsSource = che;
 }

3、Xaml中

<ItemsControl  x:Name="itemsControl"  Background="#B28BB2F1">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
          <WrapPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
          <Border Padding="3">
            <WrapPanel>
              <CheckBox  Content="{Binding txt}"/>
            </WrapPanel>
          </Border>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

调试一下就OK了。

下一篇告诉你怎么遍历这个DataTemplate,并判断哪些checkBox被选中了。

原文地址:https://www.cnblogs.com/lonelyxmas/p/9547381.html

时间: 2024-08-02 12:47:01

WPF: WrapPanel 容器的数据绑定(动态生成控件、遍历)的相关文章

周末充电之WPF(三 ) .后台动态生成控件

布局 -连连看: 代码: 1 private void Window_Loaded_1(object sender, RoutedEventArgs e) 2 { 3 4 5 //动态创建行 6 for (int i = 0; i < 10; i++) 7 { 8 //列 9 ColumnDefinition cl = new ColumnDefinition(); 10 grid.ColumnDefinitions.Add(cl); 11 12 //列 13 RowDefinition rd

Asp.net中使用文本框的值动态生成控件的方法

这篇文章主要介绍了Asp.net中使用文本框的值动态生成控件的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下 看到一个网友,有论坛上问及,动态的生成checkbox控件,在文本框中输入一个"花"字,点一下"生成"按钮,就会在下面生成一个checkbox,它的text属性是"花".再输入一个"鸟",点一下按钮,就会生成第二个checkbox控件,text属性是"鸟"... Insus.NET的解决方法

【Visual Basic】纯代码不拖控件,利用动态生成控件的方式完成一个简单的四则运算计算器

vb6是一个典型的拖控件加代码的编程代表,因此也一直被认为难登大雅之堂,但是,在vb6中可以完全纯粹地使用代码控制这个窗体与窗体的控件.这样生成出来的控件位置摆放精确无比,无须拖好控件之后,再利用工具栏的"格式"菜单慢慢地调整大小.这种方式的确定是声明一个控件要耗费大量的代码,但其实Java中的Swing,HTML+CSS排放控件,比这好不了多少. 当然,比vc6中mfc的代码简单了不少,具体见<[mfc]基本对话框程序--加法器>(点击打开链接) 一.基本目标 利用纯粹代

使用文本框的值动态生成控件

看到一个网友,有论坛上问及,动态的生成checkbox控件,在文本框中输入一个“花”字,点一下“生成”按钮,就会在下面生成一个checkbox,它的text属性是“花”.再输入一个“鸟”,点一下按钮,就会生成第二个checkbox控件,text属性是“鸟”... Insus.NET的解决方法很简单,就是每次在文本框输入的值都存起来,然后把这些数据绑定至一个CheckBoxList控件上就行了. 详细,先创建一个对象: using System; using System.Collections.

关于用户自定义控件动态生成控件以及事件问题

用户控件A,动态生成一个Button 然后为Button绑定一个事件,触发流程过程 Page->Page_Load->A_Load(可以加载Button样式和事件)->A_OnPreRender(只能在第一次加载时触发,用于加载样式和数据,不能加载事件,如果加载过就再也不加载) 1.OnPreInit:当框架调用该方法时,引发PreInit事件.在该事件中主要是应用App_Themes中的主题,与应用母版页,通常这一步我们不需要做什么 2.OnInit: 在这一步中,框架将初始化该页面所

C# Winfrom 窗体上动态生成控件慢处理

处理方式:布局挂起 panelContent.SuspendLayout(); panelContent.ResumeLayout(); private void button1_Click(object sender, EventArgs e) { panelContent.SuspendLayout(); this.panelContent.Controls.Clear(); string aa = DateTime.Now.ToString(); int k = 1; for (int j

矢量条形码生成控件Barcode Professional for WPF

Barcode Professional for WPF是一款轻量级的 .NET 程序集,为你的WPF程序生成高质量的基于矢量的条码,支持大多数流行的一维和二维条形码:Code 39, Code 128, GS1-128, GS1 DataBar (RSS-14),  EAN 13 & UPC, Postal (USPS, British Royal Mail, Australia Post, DHL, etc.), Data Matrix, QR Code, PDF 417, UPS Maxi

支持一些线性和二维条码类型的条形码生成控件IDAutomation ActiveX Barcode Control

IDAutomation ActiveX Barcode Control条形码控件是一个易于使用的图形对象,无需使用位图或特殊字体就可用它创建条码图像.此外,这个条形码ActiveX组件还能自动地格式化生成的条码结果,包括了所有必要的开始和结束字符以及校验计算.支持一些线性和二维条码类型,包括Code 39,扩展的Code 39, USS Code 128, GS1-128, Interleaved 2 of 5, LOGMARS, Codabar, EAN-128, UPC-A, UPC-E,

Html生成控件

HtmlHelper:获取或设置 System.Web.Mvc.HtmlHelper 对象,该对象用于呈现 HTML 元素. 以下是Html的写法与生成的结果的对比 @Html.Label("label1") @Html.TextBox("textBox1") @Html.TextBoxFor(m=>m.Name) @Html.Editor("editor1") @Html.EditorFor(model => model.Name)