双击WPF中数据网格中的行
我想在WPF中有一个函数:双击数据网格中的行将显示 窗口中的单元格。我怎么能做到呢?我是这样编程的,但我从来没有双击过。有人能帮我吗? 谢谢双击WPF中数据网格中的行,wpf,grid,Wpf,Grid,我想在WPF中有一个函数:双击数据网格中的行将显示 窗口中的单元格。我怎么能做到呢?我是这样编程的,但我从来没有双击过。有人能帮我吗? 谢谢 只需创建自己的依赖项属性DataGridDoubleClickProperty,将DataGrid.MouseDoubleClick事件的处理程序附加到该属性 public static class Commands { public static readonly DependencyProperty DataGridDoubleClickPrope
只需创建自己的依赖项属性DataGridDoubleClickProperty,将DataGrid.MouseDoubleClick事件的处理程序附加到该属性
public static class Commands
{
public static readonly DependencyProperty DataGridDoubleClickProperty =
DependencyProperty.RegisterAttached("DataGridDoubleClickCommand", typeof ( ICommand ), typeof ( Commands ),
new PropertyMetadata(new PropertyChangedCallback(AttachOrRemoveDataGridDoubleClickEvent)));
public static ICommand GetDataGridDoubleClickCommand(DependencyObject obj)
{
return (ICommand) obj.GetValue(DataGridDoubleClickProperty);
}
public static void SetDataGridDoubleClickCommand(DependencyObject obj, ICommand value)
{
obj.SetValue(DataGridDoubleClickProperty, value);
}
public static void AttachOrRemoveDataGridDoubleClickEvent(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
DataGrid dataGrid = obj as DataGrid;
if ( dataGrid != null )
{
ICommand cmd = (ICommand) args.NewValue;
if ( args.OldValue == null && args.NewValue != null )
{
dataGrid.MouseDoubleClick += ExecuteDataGridDoubleClick;
}
else if ( args.OldValue != null && args.NewValue == null )
{
dataGrid.MouseDoubleClick -= ExecuteDataGridDoubleClick;
}
}
}
private static void ExecuteDataGridDoubleClick(object sender, MouseButtonEventArgs args)
{
DependencyObject obj = sender as DependencyObject;
ICommand cmd = (ICommand) obj.GetValue(DataGridDoubleClickProperty);
if ( cmd != null )
{
if ( cmd.CanExecute(obj) )
{
cmd.Execute(obj);
}
}
}
}
在您的视图中,可以使用绑定将此DependencyProperty映射到命令
<Grid DataContext="{StaticResource viewModel}">
<DataGrid AutoGenerateColumns="True"
ItemsSource="{Binding Data}"
SelectedItem="{Binding SelectedItem}"
clr:Commands.DataGridDoubleClickCommand="{Binding DataGridDoubleClick}"
/>
</Grid>
DataGridDoubleClick是ViewModel类中的ICommand属性
例如,您的XAML可能如下所示:
<SomeControl MouseDown="MyMouseDownHandler">
...
</SomeControl>
您可以订阅PreviewMouseDoubleClick事件
<Style TargetType="DataGridRow">
<EventSetter Event="PreviewMouseDoubleClick" Handler="OnDoubleClick"/>
</Style>
我猜您的处理程序不起作用,因为MouseDoubleClick事件是由DataGrid处理的。路由事件可以是从子级到父级的气泡,也可以是从父级到子级的隧道。任何预览事件都是隧道事件,允许您在DataGrid之前处理它。您可以添加您的C代码处理程序在哪里吗?@leoleo您可以添加您的C代码处理程序在哪里吗?
private void MyMouseDownHandler(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
{
//Handle double-click
}
}
<Style TargetType="DataGridRow">
<EventSetter Event="PreviewMouseDoubleClick" Handler="OnDoubleClick"/>
</Style>
private void OnDoubleClick(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
System.Diagnostics.Debug.WriteLine("DoubleClick!");
}