WPF关于GetVisualChild(dr)

taojialin27 2018-01-12 03:26:36
想根据值改变某个单元格的背景色
但是一直提示
错误 1 非泛型 方法“System.Windows.FrameworkElement.GetVisualChild(int)”不能与类型实参一起使用

还有个小小问题,datag的combobox要怎么改变背景色,没有画笔

...全文
577 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluk44444 2018-01-23
  • 打赏
  • 举报
回复
引用 5 楼 taojialin27 的回复:
[quote=引用 3 楼 bluk44444 的回复:]

问题一:
第一步:
获取你需要改变背景的行。                
DataGridRow row = (dg.ItemContainerGenerator.ContainerFromItem(dg.SelectedItem) as DataGridRow);
第二步:
得到单元格
                List<DataGridCell> tbs = GetChildObjects<DataGridCell>(row, "");
第三步:
设置单元格样式
                        dataGrid.CellStyle = this.Resources["dgCellStyle"] as Style;


问题二:
你需要自定义combobox的样式:
在设计视图里,选中combobox,然后右键,编辑模板/编辑其他模板。
根据自动生成的样式代码,调整成你需要的样子。
GetChildObjects是。。? combobox是datagrid里的列,也能套用combobox的模板吗[/quote] private List<T> GetChildObjects<T>(DependencyObject obj, string name) where T : FrameworkElement { DependencyObject child = null; List<T> childList = new List<T>(); for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++) { child = VisualTreeHelper.GetChild(obj, i); if (child is T && (((T)child).Name == name | string.IsNullOrEmpty(name))) { childList.Add((T)child); } childList.AddRange(GetChildObjects<T>(child, name)); } return childList; } combobox是datagrid里的列,也能套用combobox的模板吗 ?可以的。例如: <DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox x:Name="xz" HorizontalAlignment="Center" VerticalAlignment="Center" Checked="CheckBox_Checked" IsChecked="{Binding check}" Unchecked="CheckBox_Unchecked" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate>
bluk44444 2018-01-15
  • 打赏
  • 举报
回复

问题一:
第一步:
获取你需要改变背景的行。                
DataGridRow row = (dg.ItemContainerGenerator.ContainerFromItem(dg.SelectedItem) as DataGridRow);
第二步:
得到单元格
                List<DataGridCell> tbs = GetChildObjects<DataGridCell>(row, "");
第三步:
设置单元格样式
                        dataGrid.CellStyle = this.Resources["dgCellStyle"] as Style;


问题二:
你需要自定义combobox的样式:
在设计视图里,选中combobox,然后右键,编辑模板/编辑其他模板。
根据自动生成的样式代码,调整成你需要的样子。
taojialin27 2018-01-15
  • 打赏
  • 举报
回复
滴滴。。有大腿子吗
taojialin27 2018-01-15
  • 打赏
  • 举报
回复
引用 3 楼 bluk44444 的回复:

问题一:
第一步:
获取你需要改变背景的行。                
DataGridRow row = (dg.ItemContainerGenerator.ContainerFromItem(dg.SelectedItem) as DataGridRow);
第二步:
得到单元格
                List<DataGridCell> tbs = GetChildObjects<DataGridCell>(row, "");
第三步:
设置单元格样式
                        dataGrid.CellStyle = this.Resources["dgCellStyle"] as Style;


问题二:
你需要自定义combobox的样式:
在设计视图里,选中combobox,然后右键,编辑模板/编辑其他模板。
根据自动生成的样式代码,调整成你需要的样子。
GetChildObjects是。。? combobox是datagrid里的列,也能套用combobox的模板吗
exception92 2018-01-15
  • 打赏
  • 举报
回复
GetVisualChild<DataGridCellsPresenter> 这个方法是一个自定义的泛型方法,但是它可能与 System.Windows.FrameworkElement.GetVisualChild(int) 这个方法同名了,导致编译器认为使用的是FrameworkElement.GetVisualChild(int) 这个方法。 调用的时候把名称改为完全限定的方法名称。
taojialin27 2018-01-12
  • 打赏
  • 举报
回复
                        DataGridRow dr = (DataGridRow)datag.ItemContainerGenerator.ContainerFromIndex(i);
                        DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(dr);
在Windows系统中,notepad.exe(记事本)是一个“经典的”、“简洁的”文本编辑器。这个软件,没有华丽的外观,也没有繁杂的功能,仅仅是一个文本编辑小软件。虽然经过Windows系统数十年的变换,但它却保持着永恒姿态,数十年来几乎不曾改变过。曾经,VS中的经典DEMO中,就有它的身影,一个新建的项目,就藏有一个新建的“记事本”。然而,在WPF的项目中,“记事本”却消失的无影无踪,也许是很容易实现,也许是为了革新,而不愿再传承“经典”。确实,使用WPF技术再次让“记事本”复活,确实也是一件非常容易的事情。但是,如果,使用WPF技术,再搭配当下非常流行的MVVM模式呢?复活“记事本”的难度却陡然上升至很多WPF程序员为之默默叹气。而,MVVM模式是掌握WPF的最顶级技术,MVVM模式拥有的无尽的优势,让WPF相对于过往的编程模式来说,是一种革命性的创新,从而也成为大中型WPF项目中必须的模式。但,学习难度。。。。。。在这个《WPF记事本开发详解》的课程中,赵老师带领你在WPF中,从零开始一步步构建MVVM模式,直到让你亲自以WPF+MVVM的方式,让这个经典的“记事本”软件从你的手中“复活”。在课程中,赵老师会详细讲解WPF和MVVM中的各种技巧,让你从此爱上WPF+MVVM编程。

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧