Silverlight数据网格图像

时间:2010-01-05 21:31:16

标签: 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>

2 个答案:

答案 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?如果是这样,那么数据网格将不会看到鼠标按下事件。