2010-01-05 6 views
3

En application silverlight, j'ai une grille de données avec l'image que la première colonne (s'il vous plaît voir le code ci-dessous que j'utilise)l'image Silverlight DataGrid

lorsque je clique sur l'image que je suis acquisition d'événements MouseLeftButtonDown, le problème que je Je cours sous, c'est qu'en cliquant sur l'image, le SelectedIndex dans la Datagrid ne change pas Par conséquent, je ne sais pas quelle ligne a été cliquée.

<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> 

Répondre

0

Vous définissez e.Handled à true en vous gestionnaire d'événements par hasard? Si c'est le cas, la grille de données ne verra pas l'événement de souris vers le bas.

+0

L'événement est en train d'être déclenché, mais lorsque je génère MyDataGrid.SelectedIndex, j'obtiens l'index de la co lumn et non celui sur lequel l'image a été cliquée, – Raj

+0

Est-ce que vous réglez manipulé à vrai? – AnthonyWJones

+0

non, ne le mettant pas à vrai – Raj

1

Cette question est un peu ancienne, donc je ne sais pas si vous avez la réponse ou non, mais ce que vous pouvez faire est de définir une sorte d'identifiant dans la propriété 'tag' de l'image que vous pouvez utiliser pour identifier la ligne (ou plus précisément l'objet lié à la ligne) d'où provient le clic. Je suppose que vous liez une sorte d'objet d'une collection à la ligne et que l'expéditeur est de type "image" dans votre événement.

<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> 

Maintenant, vous pouvez accéder à l'ID d'objet qui est lié à la ligne qui a été cliqué, comme si ... (en 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 

en 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 
} 

code ici