通过Tag属性可以设置自定义的数据,使用GetCellContent方法可以到单元格内的控件,所以就可以得到你点击的是哪一行了。点击的操作就很容易了。
下面的是全部的源代码
Page,xaml
- <UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
- x:Class="DataGridSnippets.Page"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- Width="600" Height="Auto">
- <ScrollViewer VerticalScrollBarVisibility="Auto" BorderThickness="0">
- <StackPanel Margin="10,10,10,10">
- <data:DataGrid x:Name="dataGrid1"
- Height="200" Margin="0,5,0,10"
- AutoGenerateColumns="False" LoadingRow="dataGrid1_LoadingRow">
- <data:DataGrid.Columns>
- <data:DataGridTextColumn Header="序号" Width="120" Binding="{Binding IndexName}" />
- <data:DataGridTextColumn Header="姓名" Width="120" Binding="{Binding UserName}" />
- <data:DataGridTextColumn Header="地址" Width="120" Binding="{Binding Address}" />
- <data:DataGridTemplateColumn Header="功能按钮" Width="80">
- <data:DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <StackPanel Orientation="Horizontal">
- <Button Content="初始化内容" x:Name="Button1" Click="Button1_Click" Tag=""></Button>
- </StackPanel>
- </DataTemplate>
- </data:DataGridTemplateColumn.CellTemplate>
- </data:DataGridTemplateColumn>
- </data:DataGrid.Columns>
- </data:DataGrid>
- <TextBlock x:Name="msg"></TextBlock>
- </StackPanel>
- </ScrollViewer>
- </UserControl>
- using System;
- using System.Collections.Generic;
- using System.Windows;
- using System.Windows.Controls;
- namespace DataGridSnippets
- {
- public partial class Page : UserControl
- {
- public Page()
- {
- InitializeComponent();
- //绑定数据
- dataGrid1.ItemsSource = Customer.GetSampleCustomerList();
- }
- private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
- {
- Customer bindData = (Customer)e.Row.DataContext;
- Button btn = dataGrid1.Columns[3].GetCellContent(e.Row).FindName("Button1") as Button;
- btn.Content = bindData.UserName;
- btn.Tag = bindData.IndexName + "," + e.Row.GetIndex();
- }
- private void Button1_Click(object sender, RoutedEventArgs e)
- {
- Button b = sender as Button;
- string[] t = b.Tag.ToString().Split(',');
- msg.Text = "你选择的值是:" + t[0] + " 是 DataGrid 的第 " + t[1] + " 行";
- }
- }
- /// <summary>
- /// 数据对象
- /// </summary>
- public class Customer
- {
- public Int32 IndexName { get; set; }
- public String UserName { get; set; }
- public String Address { get; set; }
- public Customer(Int32 indexName, String userName, String address)
- {
- this.IndexName = indexName;
- this.UserName = 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, "孟宪会之" + i.ToString(), "地址之" + i.ToString()));
- }
- return data;
- }
- }
- }
本文基于Silverlight 2.0正式版。