c# - 鼠标悬停时编辑 DataGrid 单元格

标签 c# wpf datagrid triggers datagridcell

我有一个DataGrid,它有很多行和列, 我希望当用户将鼠标焦点放在单元格上时 (IsMouseOver),单元格准备好进行编辑。

到目前为止,我发现的就是这个

<Window.Resources>
    <Style TargetType="{x:Type DataGridCell}">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="green"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

当鼠标悬停在单元格上时,我可以为其设置属性。 但是如何在鼠标悬停时启动事件呢?

最佳答案

我会在这样的样式中添加一个 EventSetter :

   <DataGrid.Resources>
         <Style TargetType="{x:Type DataGridCell}">
              <EventSetter Event="MouseEnter" Handler="EventSetter_OnHandler"/>
         </Style>
  </DataGrid.Resources>

这是处理程序:

    private void EventSetter_OnHandler(object sender, MouseEventArgs e)
    {
        DataGridCell dgc = sender as DataGridCell;

        TextBox tb = Utils.GetChildOfType<TextBox>(dgc);
        tb.Focus();
    }

事实上,您说过您想编辑一些内容。就我而言,有一个文本框,我用这个助手到达它:

     public static T GetChildOfType<T>(DependencyObject depObj) where T : DependencyObject
    {
        if (depObj == null) return null;

        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            var child = VisualTreeHelper.GetChild(depObj, i);

            var result = (child as T) ?? GetChildOfType<T>(child);
            if (result != null) return result;
        }
        return null;
    }

达到这个目标后,一个简单的 Focus() 将完成最终的工作。

关于c# - 鼠标悬停时编辑 DataGrid 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30755566/

相关文章:

.net - 是否可以在 Silverlight/WPF 中选择性地为包装 TextBlock 着色

c# - 虚拟化统一网格

c# - 如何以编程方式选择 WPF DataGrid 中的行或单元格?

c# - 从 Mysql 数据库填充 DataGrid

c# - IoC - 使用注入(inject)的对象参数解析 WPF 窗口

C# 内联条件可为空值类型

c# - 为什么禁用按钮会删除其背景颜色?

c# - 使用 C#/XAML 在 Metro 风格应用程序中将 Canvas 保存为图像

c# - 如何在c#中使用C dll头文件库

c# - WPF 通过网格本身向 DataGrid 添加行