在软件开发中,经常有动态添加控件的需求,并且让控件自动排序,当超过容器的宽度时,自动换行,在Winfrom,Unity 中都有自动布局的组件,WPF应该也有,只是我刚初学,不太清楚。
假如,在一个WPF容器中添加36个控件,每排12个,请问第4个控件和第16个控件,在容器的第几排和第几列?
在编程中遍历数组的习惯性写法,从0开始计数,3则代表4,求余数和它的商就能计算出它在那一排,那一列了。
下面开始求余数,图中这个是网页版的在线求余数计算器,用搜索引擎搜一下就出来了
图一:3 / 12 的商等于 0 代表的是第一排,余数等于 3 代表的是第四列
图二:15 / 12 的商等于 1 代表的是第二排,余数等于 3 代表的是第四列
三、生成界面
知道了这个原理,现在新建一个项目,界面的布局非常简单,代码基本是默认的,可以直接复制下面 MainWindow.xaml 中的代码。
MainWindow.xaml
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="300" Width="900" Loaded="Window_Loaded">
<Grid Width="870" Height="96" Background="Pink" Name="MyGrid">
</Grid>
</Window>
MainWindow.xaml.cs
我设置了一行固定添加12个控件,在这里并没有手动去计算,读者也可以自己实现这些功能,公式是:
X轴能容纳的控件个数 = 容器的宽度 /(控件的宽度 + 间隔距离)----结果取整
Y轴能容纳的控件个数 = 容器的高度 /(控件的高度 + 间隔距离)----结果取整
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace WpfApp1
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
public MainWindow()
InitializeComponent();
//代表一行显示多少个控件
private int CheckBoxCount = 12;
private void Window_Loaded(object sender, RoutedEventArgs e)
List<string> allNameList = new List<string>()
"上官云","上官云","上官云","上官云","上官云","上官云","上官云",
"上官云","上官云","上官云","上官云","上官云","上官云","上官云",
"上官云海","上官云海","erss","13e","scced","2edd","246","dfe","df9",
"8dl","erss","13e","scced","2edd","246","dfe","df9","8dl",
for (int i = 0; i < allNameList.Count; i++)
int quotient = i / CheckBoxCount;
int remainder = i % CheckBoxCount;
//下面的71是组件的宽度,5 是组件之间的间隔(暂时写死)
float x = (remainder * 71) + 5;
float y = (quotient * 25) + 5;
CheckBox checkbox = new CheckBox();
checkbox.Name = "CheckBox_" + i;
checkbox.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
checkbox.VerticalAlignment = System.Windows.VerticalAlignment.Top;
checkbox.Margin = new Thickness(x, y, 0, 0);
checkbox.Content = allNameList[i];
//添加到容器中
this.MyGrid.Children.Add(checkbox);
下面开始运行,看看效果:
这里效果虽然实现了,但是并没有滚动条,哈哈,暂时先这样了,后面如果有好的方法,我再修改帖子,各位大佬有更好的方法也可以留言告诉我。
如果这个帖子对你有用,欢迎关注 + 点赞 + 留言,谢谢
一、前言在软件开发中,经常有动态添加控件的需求,并且让控件自动排序,当超过容器的宽度时,自动换行,在Winfrom,Unity 中都有自动布局的组件,WPF应该也有,只是我刚初学,不太清楚。二、算法提问:在一个WPF容器中添加36个控件,每排12个,请问第4个控件和第16个控件,在容器的第几排和第几个位置?在编程中遍历数组的习惯性写法,从0开始计数,3则代表4,求余数和它的商就能计算出它在那一排,那一列了。下面开始求余数,图中这个是网页版的在线求余数计算器,用搜索引擎搜一下就出来..
private Transform mTransform;
private GameObject gameObject;
private Transform spriteTransform;
void Awake()
mTransform = GetComponent<Transform>();
//创建新物体
这是前台布局代码 <StackPanel Margin="0,50,0,0" Orientation="Horizontal" HorizontalAlignment="Center">
<StackPanel>
<Button Content="动态添加多个checkbox控件" Height="20" Padding="15,1,15,2" x:N
wpf自定义控件的位置与window完全不一样啊。。。。。。。。。。。真搞骚。
winform自定义控件位置通过location 如:Button button =new Button(); button.location=new point(x,y);
而
wpf的控件自定义位置相对于window来说较为复杂一点。首先将 标签变成
之前的事例中,生成图表都是单一的对Y轴进行赋值,或者X轴与Y轴分开赋值的方法实现。
如果想两个XY组成的
列表集,进行赋值,或者同时对X轴Y轴进行赋值来更新曲线,这里分享一种方法。
借助live charts的Mappers来实现
数据映射。
1、定义一个类
public class MeasureModel
public DateTime DateTime
get; set;
最近在项目开发中遇到一个小问题,我们的设备管理模块中有一项叫做“技术参数”,具体来说就是不同的设备具有不同的属性,而且属性的数量也不同。举个例子,桌子有长、宽、高、材质四个属性,日光灯有安装高度、额定功率两个属性。我们希望根据设备类型能够自主添加/修改/删除属性,另一方面其他模块也会用到此功能,所以考虑做一个自定义控件,将增、删、改操作封装在控件内部,数据对外开放。
版本 操作系统
<Canvas x:Name="printArea" Width="680" Height="280" Margin="90,80" Background="Blue">
<Label Content="文本框:" Canvas.Left="10.9" Canvas.Top="20.39" Width="80" Height="30" FontSize="12" Foreground="Black"/>
</Canvas>
有个需求,需要为List中的每个Item(List中是基本类型)创建一个TextBlock显示其中的值。如果在Xaml中直接写控件的话,可能不能达到理想的效果(不能使用ItemsControls这样的控件)。那么只能通过程序动态添加。特写此记录。第一种方式:将样式写在Xaml中,或者自定义一个用户控件。
TextBlock tb ...
作者:马路灯出处:博客园 2011/6/30 14:19:51阅读541 次
最近项目需要,使用一个树型控件,其实
数据量不大,简单使用一次递归就可以完事,但话说回来,想想,当
数据量达到一个量级时,这个方法明显就不足(程序运行十分不给力),而使用节点的深度特性实现加载控制,达到
动态生成节点项的目的,这不失为一个好方法。
在WPF中,拖拉拽组件动态组态是通过使用第三方库WpfAnimatedGif来实现的。该库提供了功能强大的动态图显示功能,能够在WPF应用程序中显示GIF格式的动态图。你可以搜索一下WpfAnimatedGif这个库以了解更多详情。
在编辑图片时,拖拉、放大缩小、旋转等组态的功能是比较复杂的。你可以使用一个Component类来完成所有移动、放缩、旋转的功能,然后通过继承该类的其他类来指定额外的属性。例如,在选中元件后,你可以使用Component类的方法来实现拉伸拖拉、放大缩小、旋转等操作。这其中,旋转之后的放缩是最复杂的一项功能。
总之,使用WpfAnimatedGif库和Component类,你可以在WPF应用程序中实现拖拉拽组件动态组态的功能,并且可以对图片进行复杂的编辑操作,如移动、放缩、旋转等。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [组态软件的开发(C#)](https://blog.csdn.net/m0_46577050/article/details/123519673)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]