首页 新闻 搜索 专区 学院

WPF 遍历DataTemplate(获取所有控件)

0
悬赏园豆:50 [已关闭问题] 关闭于 2012-01-17 15:28

MSDN给出了例子,原文链接http://msdn.microsoft.com/zh-cn/library/bb613579.aspx,但是那个是ListBox的,我现在要在DataGrid中的单元格中放入一个DataTemplate(Button),请看代码:

XAML的代码

DataTemplate的代码:

<DataTemplate x:Key="DataTemplateBorrow">
<Grid Height="25">
<Button Content="借阅" Name="btnBorrow" Click="btnBorrow_Click" HorizontalAlignment="Left" Margin="0" Width="Auto" Background="{x:Null}" Height="Auto"/>
</Grid>
</DataTemplate>

 

DataGridTemplateColumn代码:

<DataGridTemplateColumn Header="借阅" CellTemplate="{StaticResource DataTemplateBorrow}"/>

 -------------------------------------------------------------------------------

后台的代码:

private childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is childItem)
return (childItem)child;
else
{
childItem childOfChild = FindVisualChild<childItem>(child);
if (childOfChild != null)
return childOfChild;
}
}
return null;
}

 

Button btnBorrow;

void FindControl()
{
DataGridRow dgCells = (DataGridRow)(this.dgMain.ItemContainerGenerator.ContainerFromItem(this.dgMain.Items.CurrentItem));
ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(dgCells);
DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;
this.btnBorrow = (Button)myDataTemplate.FindName("btnBorrow", myContentPresenter);
}

--------------------------------------------------------------------------------

但是一直出错,DataGridRow换成DataGridCell什么的也不行,ListBox中我看了下ListBoxItem是继承了ContentControl的,在DataGrid中也继承ContentControl的我只找到了DataGridCell,但是不行,没用,求高人指点迷经下,谢谢!

外观是这样的,最终想实现就是说,根据选定行的某个单元格的值来设置按钮的隐藏属性,也就是说可见性,再不行的话就只好在数据库里面想法子了,加字段,然后绑定,求高人指点啊,我觉得这个很有用的,经常用得到。

问题补充:

补充下:是在WPF中的

Zewar的主页 Zewar | 初学一级 | 园豆:157
提问于:2012-01-09 15:37
< >
分享
所有回答(3)
0

asp.net 是在这个事件中判断,gvwVoucherDetail_RowDataBound。你找找是否有相似的事件。

悟行 | 园豆:12346 (专家六级) | 2012-01-09 15:39
0

其实你要解决的问题,可以归结为通过视觉树上的某个节点,找到他的子节点,只要父子关系正确,类型正确,肯定能找到。

推荐你一个工具:http://snoopwpf.codeplex.com/

可以帮你查看视觉树,这样看着找,肯定找不错的~

大繁至简 | 园豆:130 (初学一级) | 2012-09-29 08:54
0

楼主,你不要用click事件,用command来做吧。。

一梦三只鸭 | 园豆:309 (菜鸟二级) | 2012-11-24 17:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册