C# 使用带有文本框的DataGridTemplateColumn时,DataGridRow不会在ConextMenuOpening上选择

C# 使用带有文本框的DataGridTemplateColumn时,DataGridRow不会在ConextMenuOpening上选择,c#,wpf,C#,Wpf,我有一个DataGrid,带有使用文本框的模板列。这些文本框具有通过样式分配的自定义上下文菜单。问题是,当我在其中一个模板列文本框中“右键单击”以打开上下文菜单时,DataGridRow在ContextMenu打开时没有选择。它通过左键点击来工作(TextBoxfocuss和DataGridRow选择) 我在这里尝试了其他解决方案,但它们不太适合我的场景 我必须直接分配给文本框上下文菜单,并且必须使用模板列(文本框实际上是处理金钱的自定义文本框)。如何弹出/不处理右键单击,以便在打开Cont

我有一个
DataGrid
,带有使用文本框的模板列。这些文本框具有通过样式分配的自定义
上下文菜单。问题是,当我在其中一个模板列文本框中“右键单击”以打开上下文菜单时,
DataGridRow
ContextMenu
打开时没有选择。它通过左键点击来工作(
TextBox
focuss和
DataGridRow
选择)


我在这里尝试了其他解决方案,但它们不太适合我的场景

我必须直接分配给文本框上下文菜单,并且必须使用模板列(文本框实际上是处理金钱的自定义文本框)。如何弹出/不处理右键单击,以便在打开
ContextMenu
时选择
DataGrid

如何弹出/不处理右键单击,以便在打开ContextMenu时选择DataGrid行

例如,通过处理
GotKeyboardFocus
并使用助手方法在可视树中查找父
DataGridRow
元素:

private void TextBox_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    TextBox textBox = (TextBox)sender;
    DataGridRow dataGridRow = FindParent<DataGridRow>(textBox);
    if (dataGridRow != null)
        dataGridRow.IsSelected = true;
}

private static T FindParent<T>(DependencyObject dependencyObject) where T : DependencyObject
{
    DependencyObject parent = VisualTreeHelper.GetParent(dependencyObject);

    if (parent == null)
        return null;

    T parentT = parent as T;
    return parentT ?? FindParent<T>(parent);
}
private void TextBox\u获取keyboardfocus(对象发送器,KeyboardFocusChangedEventArgs e)
{
TextBox TextBox=(TextBox)发送方;
DataGridRow DataGridRow=FindParent(文本框);
if(dataGridRow!=null)
dataGridRow.IsSelected=true;
}
私有静态T FindParent(DependencyObject DependencyObject),其中T:DependencyObject
{
DependencyObject parent=VisualTreeHelper.GetParent(DependencyObject);
如果(父项==null)
返回null;
T parentT=作为T的父项;
返回父母??找到父母(父母);
}
XAML:

<DataGrid Name="dataGrid" AutoGenerateColumns="False" SelectionMode="Single">
    <DataGrid.Columns>
        <DataGridTemplateColumn  Header="SD" Width="30" MaxWidth="30" MinWidth="30">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding Description, Mode=OneWay}" GotKeyboardFocus="TextBox_GotKeyboardFocus" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>