在鼠标悬停时编辑 DataGrid 单元格
Edit DataGrid Cell on mouse over
我有一个 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>
当鼠标悬停在单元格上时,我可以为该单元格设置 属性。
但是如何在鼠标悬停的时候发起一个事件呢?
您可以像这样在 Xaml 中启动鼠标悬停事件 从您拥有 DataGridCell 的地方
<DataGridCell MouseEnter="DataGridCell_MouseEnter"/>
我会像这样在 Style 中添加一个 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() 将完成最后的工作。
我有一个 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>
当鼠标悬停在单元格上时,我可以为该单元格设置 属性。 但是如何在鼠标悬停的时候发起一个事件呢?
您可以像这样在 Xaml 中启动鼠标悬停事件 从您拥有 DataGridCell 的地方
<DataGridCell MouseEnter="DataGridCell_MouseEnter"/>
我会像这样在 Style 中添加一个 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() 将完成最后的工作。