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中的
asp.net 是在这个事件中判断,gvwVoucherDetail_RowDataBound。你找找是否有相似的事件。
其实你要解决的问题,可以归结为通过视觉树上的某个节点,找到他的子节点,只要父子关系正确,类型正确,肯定能找到。
推荐你一个工具:http://snoopwpf.codeplex.com/
可以帮你查看视觉树,这样看着找,肯定找不错的~
楼主,你不要用click事件,用command来做吧。。