时间:2015-06-10 11:53:33

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

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

2 个答案:

答案 0 :(得分:1)

我会在这样的样式中添加一个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();
    }

事实上你说你想要编辑一些东西。在我的例子中,有一个TextBox,我用这个帮助器到达它:

     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()将完成最后的工作。

答案 1 :(得分:0)

您可以在Xaml中启动鼠标悬停事件。就像这样您拥有DataGridCell

{% if cookie.name == fullcss %}
  <link rel="stylesheet" href="/css/style.css">
{% elsif page.section == 1 %}
  <style>
    {% include critical-css/getting-started.css %}
  </style>
  <script>
    {% include js/enhance.js %}
  </script>
  <noscript>
    <link rel="stylesheet" href="/css/style.css">
  </noscript>
{% elsif page.section == 1 %}
  ...