2010-01-05 67 views
3

在Silverlight应用程序,我有一个形象作为第一列一个DataGrid(请参阅下面的代码我使用)的Silverlight数据网格图像

当我点击我捕捉MouseLeftButtonDown事件的图像上,问题我我下运行的是,同时点击图像上DataGrid中的SelectedIndex是不会改变因此,我不知道被点击哪一行。

<data:DataGridTemplateColumn Width="25"> 
    <data:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Image Width="20" Stretch="Fill" Name="Delete" Source="/Portal;Component/Images/Delete.png" MouseLeftButtonDown="ImageDelete_MouseLeftButtonDown"/> 
     </DataTemplate> 
    </data:DataGridTemplateColumn.CellTemplate> 
</data:DataGridTemplateColumn> 

回答

0

你在每个机会,你的事件处理程序设置e.Handledtrue?如果是这样,那么数据网格将不会看到鼠标停止事件。

+0

事件正在被解雇,但是当我输出 MyDataGrid.SelectedIndex时,我得到了先前选择的co的索引lumn而不是点击图像的那个, – Raj 2010-01-05 21:40:20

+0

你是否将处理设置为true? – AnthonyWJones 2010-01-05 21:49:36

+0

不会将它设置为true – Raj 2010-05-13 06:35:14

1

这个问题是慈祥的老人,所以我不知道你是否有答案或没有,但你可以做的是设置某种标识符的,你可以用它来对图像的“标签”属性标识点击来自的行(或更确切地说是绑定到该行的对象)。我假设你将某个对象从一个集合绑定到该行,并且'发件人'在你的事件中是'image'类型的。

<data:DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <Image Width="20" Stretch="Fill" Name="Delete" Source="/Portal;Component/Images/Delete.png" MouseLeftButtonDown="ImageDelete_MouseLeftButtonDown" Tag="{Binding Id}"/> 
    </DataTemplate> 
</data:DataGridTemplateColumn.CellTemplate> 

现在您可以访问绑定到被点击的,像这样的行对象的ID ...(在VB)

Private Sub ImageDelete_MouseLeftButtonDown(sender As System.Object, e As System.Windows.Input.MouseButtonEventArgs) 
     Dim img As Image = TryCast(sender, Image) 
     Dim id As Integer = CInt(img.Tag) 
     ' Do stuff with id 
    End Sub 

在C#:

Private void ImageDelete_MouseLeftButtonDown(System.Object sender, System.Windows.Input.MouseButtonEventArgs e) 
{ 
    Image img = sender as Image; 
    int id = Convert.ToInt32(img.Tag); 
    // do stuff with id 
} 

这里的代码