通过Tag属性可以设置自定义的数据:
(1)借助LoadingRow事件,在初始化DataGrid过程中 使用GetCellContent方法,它可以到单元格内的控件。这时,你也就可以得到你点击的是哪一行了,你可以选择将适当的信息赋给该行的Button的Tag属性; 然后在单击button 按钮时,就可以对该信息进行读取和使用了:
(2)如果你不关心在某一行,而很需要得到改行绑定的实体。那么,你可以在定义Button的时候,将Button的Tag属性直接进行空绑定,可以将该该行绑定的实体对象赋值给Tag,那么在单击Button时,就可以直接使用该对象了。
这样,点击的操作就很灵活了,也可以解决很多问题了。
XAML 脚本:
<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="SilverlightApplication1.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="600" Height="Auto">
<Grid x:Name="LayoutRoot" Background="White">
<ScrollViewer VerticalScrollBarVisibility="Auto" BorderThickness="1" BorderBrush="Gray">
<StackPanel Margin="10">
<data:DataGrid x:Name="gridDataList" AutoGenerateColumns="False" LoadingRow="DataGrid_LoadingRow" Height="200" Margin="0 5 0 10">
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="序号" Width="80" Binding="{Binding Index}"/>
<data:DataGridTextColumn Header="姓名" Width="100" Binding="{Binding Name}"/>
<data:DataGridTextColumn Header="地址" Width="260" Binding="{Binding Address}"/>
<data:DataGridTemplateColumn Header="功能按钮" Width="120">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="Button" Width="50" Content="初始化内容" Height="21" Tag="{Binding}" Click="Button_Click"></Button>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
<TextBlock x:Name="msg"></TextBlock>
</StackPanel>
</ScrollViewer>
</Grid>
</UserControl>
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="600" Height="Auto">
<Grid x:Name="LayoutRoot" Background="White">
<ScrollViewer VerticalScrollBarVisibility="Auto" BorderThickness="1" BorderBrush="Gray">
<StackPanel Margin="10">
<data:DataGrid x:Name="gridDataList" AutoGenerateColumns="False" LoadingRow="DataGrid_LoadingRow" Height="200" Margin="0 5 0 10">
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="序号" Width="80" Binding="{Binding Index}"/>
<data:DataGridTextColumn Header="姓名" Width="100" Binding="{Binding Name}"/>
<data:DataGridTextColumn Header="地址" Width="260" Binding="{Binding Address}"/>
<data:DataGridTemplateColumn Header="功能按钮" Width="120">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="Button" Width="50" Content="初始化内容" Height="21" Tag="{Binding}" Click="Button_Click"></Button>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
<TextBlock x:Name="msg"></TextBlock>
</StackPanel>
</ScrollViewer>
</Grid>
</UserControl>
后置代码:
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
gridDataList.ItemsSource = Customer.GetSampleCustomerList();
}
private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
Customer bindData = (Customer)e.Row.DataContext;
Button btn = gridDataList.Columns[3].GetCellContent(e.Row).FindName("Button") as Button;
btn.Content = bindData.Name;
//btn.Tag = bindData.Index + "," + e.Row.GetIndex();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Button b = sender as Button;
Customer c = b.Tag as Customer;
msg.Text = "你选择" + c.Name + "的Index是:" + c.Index + ",它位于 DataGrid 的第 " + c.Index + " 行";
//string[] t = b.Tag.ToString().Split(',');
//msg.Text = "你选择的值是:" + t[0] + " 是 DataGrid 的第 " + t[1] + " 行";
}
}
/// <summary>
/// 数据对象
/// </summary>
public class Customer
{
public Int32 Index { get; set; }
public String Name { get; set; }
public String Address { get; set; }
public Customer(Int32 indexName, String userName, String address)
{
this.Index = indexName;
this.Name = userName;
this.Address = address;
}
public static List<Customer> GetSampleCustomerList()
{
//示例数据
List<Customer> data = new List<Customer>();
for (int i = 0; i < 10; i++)
{
data.Add(new Customer(i * i, "Jack 之" + i.ToString(), "地址之" + i.ToString()));
}
return data;
}
}
{
public Page()
{
InitializeComponent();
gridDataList.ItemsSource = Customer.GetSampleCustomerList();
}
private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
Customer bindData = (Customer)e.Row.DataContext;
Button btn = gridDataList.Columns[3].GetCellContent(e.Row).FindName("Button") as Button;
btn.Content = bindData.Name;
//btn.Tag = bindData.Index + "," + e.Row.GetIndex();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Button b = sender as Button;
Customer c = b.Tag as Customer;
msg.Text = "你选择" + c.Name + "的Index是:" + c.Index + ",它位于 DataGrid 的第 " + c.Index + " 行";
//string[] t = b.Tag.ToString().Split(',');
//msg.Text = "你选择的值是:" + t[0] + " 是 DataGrid 的第 " + t[1] + " 行";
}
}
/// <summary>
/// 数据对象
/// </summary>
public class Customer
{
public Int32 Index { get; set; }
public String Name { get; set; }
public String Address { get; set; }
public Customer(Int32 indexName, String userName, String address)
{
this.Index = indexName;
this.Name = userName;
this.Address = address;
}
public static List<Customer> GetSampleCustomerList()
{
//示例数据
List<Customer> data = new List<Customer>();
for (int i = 0; i < 10; i++)
{
data.Add(new Customer(i * i, "Jack 之" + i.ToString(), "地址之" + i.ToString()));
}
return data;
}
}
基于Silverlight 2.0正式版。
分类:
10~silverlight
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)