Silverlight 3 Datagrid: Obtener fila / artículo en mouseover
-
18-09-2019 - |
Pregunta
Tengo un DataGrid enlazado y varios otros controles (externos a la cuadrícula de datos) que muestran más detalles sobre el selectedrow en la cuadrícula de datos. Esto es fácil de hacer con el enlace de datos o controlar el evento SelectionChanged en la cuadrícula de datos.
Sin embargo, ¿cómo puedo hacer esto sin requerir que el usuario seleccione una fila -. Por ejemplo, en 'mouseover' puedo cambiar el elemento seleccionado o conseguir la fila / artículo 'bajo' el ratón
Solución 2
Esta es una aplicación simple pero menos genérica de respuesta de Jim. En VB.Net:
Private Sub DataGrid1_LoadingRow(ByVal sender As Object, ByVal e As System.Windows.Controls.DataGridRowEventArgs) Handles DataGrid1.LoadingRow
AddHandler e.Row.MouseEnter, AddressOf row_MouseEnter
End Sub
Private Sub row_MouseEnter(ByVal sender As Object, ByVal e As MouseEventArgs)
Dim row = CType(sender, DataGridRow)
Me.DataGrid1.SelectedItem = CType(row.DataContext, MyType)
End Sub
Otros consejos
Pruebe algo como esto en su clase de contenedor como el control de usuario, Cuadrícula, StackPanel, etc ...
public class MyContainerClass : FrameworkElement
{
public MyContainerClass()
{
base.Loaded += OnLoaded;
}
private void OnLoaded(object sender, RoutedEventArgs e)
{
m_DataGrid.MouseMove += OnMouseMove;
}
private void OnMouseMove(object sender, MouseEventArgs e)
{
DataGridRow item = (sender as DependencyObject).ParentOfType<DataGridRow>();
if (item != null && m_DataGrid.SelectedIndex != item.GetIndex())
m_DataGrid.SelectedIndex = item.GetIndex();
}
}
y añadir a la extensión clase de ayuda ...
internal static class DependencyObjectExt
{
// Extension for DependencyObject
internal static TT ParentOfType<TT>(this DependencyObject element) where TT : DependencyObject
{
if (element == null)
return default(TT);
while ((element = VisualTreeHelper.GetParent(element)) != null)
{
if (element is TT)
return (TT)element;
}
return null;
}
}
Buena suerte,
Jim McCurdy
YinYangMoney