首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在不搜索整个DataGrid子级的情况下从DataGridTextColumn获取控件

从DataGridTextColumn获取控件的方法是使用VisualTreeHelper类来遍历DataGrid的子元素,然后通过判断子元素的类型来获取DataGridTextColumn对应的控件。

以下是一个示例代码:

代码语言:csharp
复制
private TextBox GetTextBoxFromDataGridTextColumn(DataGrid dataGrid, int columnIndex)
{
    TextBox textBox = null;
    
    DataGridRow dataGridRow = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(0);
    if (dataGridRow != null)
    {
        DataGridCellsPresenter cellsPresenter = GetVisualChild<DataGridCellsPresenter>(dataGridRow);
        if (cellsPresenter != null)
        {
            DataGridCell dataGridCell = (DataGridCell)cellsPresenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);
            if (dataGridCell != null)
            {
                textBox = GetVisualChild<TextBox>(dataGridCell);
            }
        }
    }
    
    return textBox;
}

private T GetVisualChild<T>(Visual parent) where T : Visual
{
    T child = default(T);
    
    int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
    for (int i = 0; i < numVisuals; i++)
    {
        Visual visual = (Visual)VisualTreeHelper.GetChild(parent, i);
        child = visual as T;
        if (child == null)
        {
            child = GetVisualChild<T>(visual);
        }
        if (child != null)
        {
            break;
        }
    }
    
    return child;
}

这段代码中,GetTextBoxFromDataGridTextColumn方法接收一个DataGrid和一个列索引作为参数,返回对应列的TextBox控件。它首先通过ItemContainerGenerator获取DataGrid的第一行,然后通过GetVisualChild方法遍历子元素,直到找到DataGridCell,最后再通过GetVisualChild方法找到TextBox控件。

这种方法适用于在不搜索整个DataGrid子级的情况下从DataGridTextColumn获取控件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WPF --- 如何以Binding方式隐藏DataGrid

方式,更改为指定 ElementName获取元素方式,也一样生效。...我疑惑了很久,直到看到了Visual Studio中实时可视化树: 图中可以看出,虽然我 Xaml 中声明了两列 DataGridTextColumn,但他根本不在可视化树中。...「获取 RelativeSource 和指定 ElementName 方式,本质上还是可视化树中寻找元素」,所以上述方案无法生效。...比如 Button 比如 DataGrid : 又比如 ListBox : 大家可以去看看其他控件,几乎 WPF 中所有的控件都继承自 Visual(例如,Panel、Window、Button 等都是由...摘取部分官方解释如下: 文档中可以看出 Freezable 非常符合我们想要,第一它本身继承 DependencyObject 且它在属性值更改时能够提供变化通知。

36610

深入解析 DataGrid 过滤功能

过滤是DataGrid这样表格控件基本功能之一,也是非常重要特性。微软提供标准DataGrid相信大家都很熟悉了。...全文过滤 C1DataGrid提供了对整个Grid中文本进行过滤功能,用户可一次性完成所有列检索或过滤操作。...> 通过C1AdvancedFiltersBehavior为Grid中列添加了简单过滤和多值过滤功能,这并没有使用太多控件,是为整个Grid添加高级过滤功能最简单方法。... 通过代码设置过滤功能 有些情况下,需要在代码中控制过滤功能,C1DataGrid为此提供了两个非常重要事件。...根据数据不同,你可以设置一个树形结构、直方图或者日历形式过滤器,你可以C1DataGrid例子中找到相应实现。

2.8K70

C# WPF DataGrid获取单元格并改变背景色

01 概述 WPF 自带了一个表格控件datagrid,这个控件类似winfrom中datagridview,在数据显示时候也经常会用到,这节主要讲解如何后台代码获取到单元格控件并改变其相关属性:...DataGridCellEditEndingEventArgs e) { } /// /// 获取父可视对象中第一个指定类型可视对象...name="T">可视对象类型 /// 父可视对象 /// 第一个指定类型可视对象...;//获取选中单元格列号 ④获取选中行行号 SelectionUnit="FullRow" 时候: 可以通过这样获取: rowindex = this.dgSourceData.SelectedIndex...;//获取选中单元格行号 在当SelectionUnit="Cell"时: 我是通过选中单元格对应行信息和表格控件绑定集合匹配获取行号: for (int i = 0; i < ShellViewModel.StudentList.Count

2.5K20

Newbeecoder.UI新版开源控件DataGrid使用说明

DataGrid控件显示数据和信息集合。WPF能自定义外观,单元格,表格头部,字体,颜色等内容。 使用ItemsSource属性进行数据源绑定,绑定任何实现IEnuemerable数据源。...默认情况下,当用户单击DataGrid单元格时会选择整行,如果用户选择多行设置SelectionMode属性。假如不想生成自动列使用AutoGenerateColumns属性设置为false。...Microsoft Docs对DataGrid每项功能有详细说明。 样式中有常见表格选项,如交替行背景和显示/隐藏标题,网格线和滚动条。...Newbeecoder.UI是一个轻量级和扩展性开源项目,基于MVVM开发框架,可用来快速搭建WPF应用程序,而无需了解控件内部实现细节,方便扩展更多控件样式以及使用,该项目使用纯C#+WPF开发,易于扩展和集成到开发项目中...Demo下载: Newbeecoder.UI.zip Newbeecoder.UI控件库根据用户需求开发稳定而高效项目,通过视频来演示控件库整体功能: 视频内容 ​ 控件库中使用DataGrid很简单

2.8K30

【愚公系列】2023年10月 WPF控件专题 DataGrid控件详解

一、DataGrid控件详解WPF中DataGrid是一个非常强大和灵活控件,它可用于展示和编辑数据。...DataGrid还有许多其他属性和方法,可以根据需求进行使用。1.属性介绍WPF中DataGrid控件常见属性如下:AutoGenerateColumns:是否自动生成列,默认为true。...数据分页:DataGrid控件可以支持数据分页显示,当数据量比较大时,可以将数据分页展示,方便用户进行快速数据浏览和查找。...数据导入导出:DataGrid控件可以支持数据导入和导出,可以将数据快速地导入到DataGrid中进行展示,也可以将DataGrid数据导出到其他文件格式中,方便数据共享和使用。...StudentDialogViewModel中,我们使用了一个私有字段_student来存储传入Student对象,以及一些属性来绑定StudentDialog控件属性setter中通知界面更新

89300

XAML常用控件2

布局控件 除了我们之前讲过Grid,StackPanel,Border布局控件,xaml中还有如下几个布局控件: Canvas:使用这个布局,可以通过坐标来控制控件显示。...wpf和WinForm中XY轴定义是一样,都是程序左上角作为原点,原点到右上角这一条线是X轴,原点到左下角这一条线是Y轴。...WarpPanel:这个布局跟StackPanel很相像,它是流式布局,同样是使用Orientation属性来控制控件排列,但是比StackPanel更强大功能是当控件不能在一行或者一列排开时,它会自另起一行或一列...控件 这个控件就是一个表格,跟数据库中表是类似的,并且它职责就是用来显示数据库中数据,下面先看个实例代码: 该控件同样是使用ItemsSource来绑定数据,我们使用该控件时要先通过DataGrid.Columns来定义列数量及类型,微软已经为我们定义了上述代码中所示文本

2.3K30

C# WPF数据绑定方法以及重写数据模板后数据绑定

写在前面 本文将会介绍WPF如何实现前后端数据绑定和在进行数据绑定时常用方法和类以及对于DataGrid、ListView这样控件重写数据模板后控件如何进行数据绑定。...点击左下角“添加学生小刚”按钮,弹出是否确认添加小刚信息确认框,点击是则会添加小刚信息。 电话信息中输入回车会显示点击了回车弹框,并且显示控件内容。...3.数据模板重写:本实例中重写了DataGrid控件电话一列和删除一列数据模板,我们可以看到电话一列重写为了TextBox删除一列重写为了Button,表头也可以进行数据模板重写。...DataTemplate中你可以写几乎任意控件,如果需要放多个控件可以使用Grid和StackPanel这类布局控件进行封装。...当然绑定过程中你可以设置多种模式,如果设置默认为双向绑定,设置方法是通过Mode属性(Binding="{Binding Name ,Mode=TwoWay}")你可以设置Default、OneTime

51840

Freezable ---探索Freezable承载数据原理

引言 之前写一篇文章【WPF --- 如何以Binding方式隐藏DataGrid列】中,我先探索了 DataGridTextColumn 为什么不在可视化树结构内?..., binding); dataGrid.Columns.Add(columen1); DataGridTextColumn columen2 = new DataGridTextColumn...接下来,程序启动之前,我们 CustomFreezable 重载方法 OnChanged() 设置断点,然后使用VS调试源码,查看调用堆栈: 可以看到, InitDataGrid() 开始,到属性变化触发变化事件...,整个流程都可以调用堆栈中看到,我们可以逐帧分析,来解决开篇两个问题。...可以看到1~9仅仅是 FindResource("customFreezable"); 这一个方法所作事情,主要是资源字典中查询想要对象,如果该对象是 Freezable类型,则将当前资源

14610

WPF GridControl控件用法举例

01 — 前言 WPF中自带表格控件DataGrid,但是格式并不是很美观,我们一般用 Dev中类似的控件GridControl来取代,这个控件功能相当强大。...WPF数据网格(GridControl)是一个数据感知控件,用于以不同布局显示和编辑数据:表格、树状和卡片。GridControl允许用户管理大量数据(排序、分组、筛选等)。...当GridContol显示时默认有一个拖拽框用以将字段拖入其中进行分组排序,这是一个很强大功能,如果你不需要这个功能,可以ShowGroupPanel=“false”。 2....GridControl通过设置TableViewAutoWidth=“Auto”来使Columns占满整个Grid,如果设置的话有时候你会发现展现出Grid会多出一列!...4. dxg:GridColumn不能直接包含FontFamily等DataGridTextColumn中常见属性,需要重写Template,重写时候有两个地方需要绑定,Template绑定是RowData.Row.XX

1.8K30

WPF NET5 Prism8.0升级指南

Prism系列文章下面留下我认为可以拿来一讲一些问题,而有些问题我则是水平有限回答不了(真的不是不想回答)  然后我拿之前Prism Demo项目,WPF.NET Core3.1升到.NET...5其实非常简单,无脑修改项目的TargetFramework为net5.0-windows就行了,但是当Prism7.2升到Prism8.0,我发现build时候报了很多错误,那么让我们来看看究竟Prism8.0...> <DataGridTextColumn...,同样也确实不会出现跨线程问题(非UI线程操作ObservableCollection集合会出现),关于async awaitWPF不会出现跨线程问题,可以参考我另外一篇文章异步函数async...例如对控件样式变化,鼠标移动控件等View逻辑相关,这时候则推荐用依赖或者附加属性,或在ViewCode-behindcs文件中事件来处理有关View逻辑,不要为了所谓MVVM而把一切逻辑都放在

2.7K40

常见 Datagrid 错误

虽然 Datagrid 控件易于使用,但同样易于给使用者带来麻烦。以下是许多人所犯一些错误,这些人包括初学者到富有经验 .NET 专家。...即使需要对 HTML 输出进行特殊控制,您也可以在用户界面上记录集内容重复出现情况下,使用某个数据 Web 控件。...运行时不必要地 Datagrid 中动态创建 Datagrid 控件或列 某些业务和技术方案中,在运行时创建 ASP.NET 控件是必要,也是完全合适。...或是要创建一个复合服务器控件,其中每个子控件都需要动态创建,因为无法以声明方式创建这些控件。如果遇到这些情况,请注意,提交页面时不要保留这些动态控件。...要使页面大小增加,最简单方法是无论对整个页面,还是单独对某些特定控件,都禁用 ViewState。例如,如果页面产生回发,那么对整个页面禁用 ViewState 是安全

2.3K20

Convert string to DateTime

: 概要 DataGrid Web 控件有内置自动或自定义分页功能,而 DataGrid Windows 控件则没有。...要效仿这个示例代码将每页 DataRow 对象内存中 DataSet 复制到一个临时表中。该临时表随后与 DataGrid 控件绑定。 1....将下列附加控件放置 Form1 上,并按如下所示设置它们属性: 控件 Name 属性 Text 属性 Button btnFirstPage First Page Button btnNextPage...复制以下代码并将其粘贴到紧挨静态空 Main 方法之后,以使其作用范围为窗体:private void LoadPage() { int i; int startRec;...默认情况下,Page Size(页面大小)设置为 5 条记录。您可以文本框中更改此设置。 16. 单击 Fill Grid。注意,DataGrid 中填入了 5 条记录。 17.

1.8K90

如何使用 Visual C# .NET 对 DataGrid Windows 控件执行分页

: 概要 DataGrid Web 控件有内置自动或自定义分页功能,而 DataGrid Windows 控件则没有。...要效仿这个示例代码将每页 DataRow 对象内存中 DataSet 复制到一个临时表中。该临时表随后与 DataGrid 控件绑定。 1....将下列附加控件放置 Form1 上,并按如下所示设置它们属性: 控件 Name 属性 Text 属性 Button btnFirstPage First Page Button btnNextPage...复制以下代码并将其粘贴到紧挨静态空 Main 方法之后,以使其作用范围为窗体:private void LoadPage() { int i; int startRec;...默认情况下,Page Size(页面大小)设置为 5 条记录。您可以文本框中更改此设置。 16. 单击 Fill Grid。注意,DataGrid 中填入了 5 条记录。 17.

1.5K100

OEA 中 WPF 树型表格虚拟化设计方案

还好,OEA 中 TreeGrid 本身就是我们自己为 OEA 量身定制控件,所以可以直接改造。     但是,要同时一个表格控件中同时实现行、列虚拟化呢?...假设这个容器为 A,那么, A 基础上,如果 Offset 是 0,则整个 GeneratorPosition 就表示项容器 A;而如果 Offset 非 0,则表示一个还没有生成项容器 B,它距离...图1 DataGrid 虚拟化可视树结构     结合上面这个图,再查阅 DataGrid 源码,可以看出:     * 整个 DataGrid 表格中只有一个 ScrollViewer,表格作为一个...这导致了当每一行统一时,竖向滚动条会计算出错,造成很差用户体验。...下次更新 OEA 时候,大家就可以开源地址中下载到了。     TreeGrid 表格实现虚拟化技术,涉及到重构整个控件内部组织结构,是本阶段 TreeGrid 重构一个首要内容。

2.7K70

简单实现DataGrid使用CheckBox选择行

以前写过几个方法实现这个功能,但最终还是选择了继承DataGrid,所以再重新发布出来。 先显示最终结果,其中左边是错误例子,右边才是正确 ?...DataGrid中使用CheckBox选择行时典型错误就是CheckBox没有Binding到任何属性上,这样的话当拖动滚动条时CheckBox.IsChecked就会乱掉,如Demo中左边那个DataGrid...最直观解决方法是禁用DataGrid滚动条,或者绑定数据上添加一个用于绑定CheckBoxbool属性。...DataGrid.Columns中加入自定义Column,然后代码中关联DataGrid和这个Colum,就完成了: <sdk:DataGrid ItemsSource="{Binding}"                       ...创建一个UserControl然后把它改成DataGridTemplateColumn,这样好处是DataTemplate和Style中FrameworkElement都可以轻松地获取

86230

OEA 中 WPF 树型表格整体重构

为什么要重构     上两个月主要做了一件事情,那就是把 OEA 框架中 TreeGrid 控件结构上重新设计,并大量重构现有代码。...整个 TreeGrid 控件混合了三个控件代码而成,包括:GridView、TreeView 以及自身一些代码,内容复杂,维护较难。...而我们 TreeGrid,由于之前做得一直彻底,代码比较乱,经常出现 BUG,修改起来也非常费时。(我记得,之前开发项目,花了太多时间修正这个半成品控件问题上了。...通过添加一些 bool 类型防止重入字段,Measure 中可以做所有逻辑操作之后、渲染之前控件构造、刷新、替换、状态变更,并对最终确定可视树元素进行测量。如: if(this....所以,开发自定义控件时,尽量不要把控件可视树关系要求得过于严格。当没有指定可视树关系时,也不应该抛出异常。而是应该检测,如果在有指定元素情况下,才表现出具体行为,否则将没有行为。

1.8K60
领券