WPF Grid 用 C# 代码后台设置

运行环境:Window7 64bit,.NetFramework4.61,C# 6.0; 编者:乌龙哈里 2017-02-21


参考:

章节:

  • 动态增加行列及控件放置
  • 设置Grid的行列尺寸

正文:

一、动态增加行列及控件放置

要用到
Grid.SetRow(控件名, 行序号)
Grid.SetColumn(控件名, 列序号),
另一种写法是:
控件实例.SetValue(Grid.RowProperty, 行序号)
控件实例.SetValue(Grid.ColumnProperty, 列序号)

示例1演示如何增减行和放置控件:

示例1:

public partial class MainWindow : Window
{
    private int rowCount = 0;
    private int colCount = 0;
    private int itemCount = 0;

public MainWindow()
    {
        InitializeComponent();
        grdShow.ColumnDefinitions.Add(new ColumnDefinition());
        grdShow.ColumnDefinitions.Add(new ColumnDefinition());
        grdShow.ColumnDefinitions.Add(new ColumnDefinition());
        grdShow.RowDefinitions.Add(new RowDefinition());
    }

private void btnAdd_Click(object sender, RoutedEventArgs e)
    {
        itemCount++;
        TextBlock tbk = new TextBlock() { Text = $"Item {itemCount.ToString()}" };
        if (colCount % 3 == 0)
        {
            grdShow.RowDefinitions.Add(new RowDefinition());
            colCount = 0;
            rowCount++;
        }
        tbk.SetValue(Grid.RowProperty, rowCount);
        tbk.SetValue(Grid.ColumnProperty, colCount++);
        
        //Grid.SetRow(tbk, rowCount);
        //Grid.SetColumn(tbk, colCount++);

grdShow.Children.Add(tbk);
    }

private void btnDelete_Click(object sender, RoutedEventArgs e)
    {
        itemCount = grdShow.Children.Count;
        if (itemCount > 0)
        {
            grdShow.Children.RemoveRange((itemCount-1) / 3 *3,(itemCount-1) %3 +1);
            grdShow.RowDefinitions.RemoveAt((itemCount-1) / 3);
        }
    }
}

结果如下图:

二、设置Grid的行列尺寸

设置 Grid 行列的尺寸要用到 GridLength 结构。以下示例是设置3行,第1行是固定高度24,第2行是动态高度 1*,第3行也是动态高度 2*,我这里所谓的动态高度是指随着窗口尺寸的变化而变化的尺寸。

示例3:

grdShow.RowDefinitions.Add(new RowDefinition { Height = new GridLength(24)} );
grdShow.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
grdShow.RowDefinitions.Add(new RowDefinition {Height=new GridLength(2,GridUnitType.Star)});

Button btn1 = new Button {Content="Fix",Margin=new Thickness(2)};
Grid.SetRow(btn1, 0);
Button btn2 = new Button {Content="1*", Margin = new Thickness(2) };
Grid.SetRow(btn2, 1);
Button btn3 = new Button {Content="2*", Margin = new Thickness(2) };
Grid.SetRow(btn3, 2);

grdShow.Children.Add(btn1);
grdShow.Children.Add(btn2);
grdShow.Children.Add(btn3);

运行结果如下图,第2行的 Button 是第3行的 Button 高度的1/2,而且随着窗口变化而变化。

WPF Grid 用 C# 代码后台设置的更多相关文章

  1. WPF后台设置xaml控件的样式System.Windows.Style

    WPF后台设置xaml控件的样式System.Windows.Style 摘-自 :感谢 作者: IT小兵   http://3w.suchso.com/projecteac-tual/wpf-zhi ...

  2. VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法。

    原文:VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net ...

  3. Extjs 4.2 Grid增删改及后台交互(Java)

    上次发了Easyui Datagrid的增删改查的使用学习记录后一直想整理下基于Extjs4.2的Grid学习使用记录.苦于抽不出时间,一直拖到现在.不得不说,Extjs确实很强大,新版的Neptun ...

  4. WPF中,如何将绑定源设置到单件实例

    原文:WPF中,如何将绑定源设置到单件实例  WPF中,如何将绑定源设置到单件实例                                       周银辉 大概两个月前,曾有位朋友问我:如 ...

  5. 工作记录--WPF自定义控件,实现一个可设置编辑模式的TextBox

    原文:工作记录--WPF自定义控件,实现一个可设置编辑模式的TextBox 1. 背景 因为最近在使用wpf开发桌面端应用,在查看页面需要把TextBox和Combox等控件设置为只读的.原本是个很简 ...

  6. C#/WPF/WinForm/.NET程序代码实现软件程序开机自动启动的两种常用方法的示例与源码下载带详细注释-源码代码-注册表方式-启动目录快捷方式

    C#/WPF/WinForm/.NET程序代码实现软件程序开机自动启动的两种常用方法的示例与源码下载带详细注释-源码代码-注册表方式-启动目录快捷方式 C#实现自动启动的方法-两种方法 源码下载地址: ...

  7. wpf 手指触摸图片放大缩小 设置放大缩小值

    xaml代码: <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/w ...

  8. 转--Android如何在java代码中设置margin

    ========  3 在Java代码里设置button的margin(外边距)? 1.获取按钮的LayoutParams LinearLayout.LayoutParams layoutParams ...

  9. 详解Spring中的CharacterEncodingFilter--forceEncoding为true在java代码中设置失效--html设置编码无效

    在项目中有很多让人头疼的问题,其中,编码问题位列其一,那么在Spring框架中是如何解决从页面传来的字符串的编码问题的呢?下面我们来看看Spring框架给我们提供过滤器CharacterEncodin ...

随机推荐

  1. skywalking探针tomcat8.0.28报错解决

    在部署skywalking agent的时候遇到一个异常 环境如下: tomcat8.0.28 catalina.out 日志报如下错误 30-Apr-2019 10:25:57.664 INFO [ ...

  2. Python学习-第三方库操作

    2018-05-04   12:03:19 Python安装模块,更新模块 #显示模块 pip list #显示过期模块 pip list --outdated #安装模块 pip install x ...

  3. 第一次Sprint团队贡献分

    201406114105       董婷婷           21 201406114157       容杰龙           22 201406114343       卓炜杰       ...

  4. http状态码status

    status——http状态码 1xx 消息 2xx 成功 3xx 重定向 ▪ 301 Moved Permanently 永久重定向——下回不会再找他了 ▪ 302 Move temporarily ...

  5. spring容器启动

    1 主要类 ContextLoaderListener:注册在web.xml中,web应用启动时,会创建它,并回调它的initWebApplicationContext()方法,从而创建并启动spri ...

  6. WiresShark使用说明

    WiresShark是号称全世界最流行的网络分析工具(它的官网自己说的).下载地址:https://www.wireshark.org/#download,目前最新版本是2.6.2.我本地用的是汉化的 ...

  7. jdk1.8新特性之函数式接口

    函数式接口就是只有一个抽象方法的接口.如果这个接口里没有或者包含了两个以上的抽象方法,对不起,你不叫函数式接口,只能叫你接口.那这个函数式有啥用呢?如果配合Lambda表达式的话,可以大大的简化代码. ...

  8. 结合示例说明C++中const和指针结合时怎么理解

    在之前随笔<C++中const使用要点(一)>中简单叙述了const int*.int* const和const int* const的区别,记住三句话就能在实际运用时用对,但是看书时发现 ...

  9. 关于PIPELINE,也许你应该知道

    所谓流水线(pipeline)设计,通常来说是流水生产线. 同样,组合逻辑路径可以看作是一条生产线,路径上的每个逻辑单元都可以看作是一个阶段,都会产生时延. 如果不采用流水设计,前后级组合逻辑依次工作 ...

  10. mysql 存储过程简单学习

    转载自:http://blog.chinaunix.net/uid-23302288-id-3785111.html ■存储过程Stored Procedure 存储过程就是保存一系列SQL命令的集合 ...