在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 :(得分:1)
这个问题有点陈旧,所以我不确定你是否有答案,但你可以做的是在图像的'tag'属性中设置一些标识符,你可以用它来识别单击来自的行(或更确切地说是绑定到行的对象)。我假设你将某个对象从一个集合绑定到该行,并且'sender'在你的事件中是'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
}
代码
答案 1 :(得分:0)
您是否偶然在事件处理程序中将e.Handled
设置为true
?如果是这样,那么数据网格将不会看到鼠标按下事件。