Мне удалось это сработать, xmal не изменился.В коде позади contextMenuOpening
я проверяю, по какому столбцу щелкнули, исходя из этого, я изменю заголовок menuitem
private void basketDG_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
DependencyObject depObj = (DependencyObject)e.OriginalSource;
while ((depObj != null) && !(depObj is Microsoft.Windows.Controls.DataGridCell))
{
depObj = VisualTreeHelper.GetParent(depObj);
}
if (depObj == null)
{
return;
}
if (depObj is Microsoft.Windows.Controls.DataGridCell)
{
var obj = depObj as Microsoft.Windows.Controls.DataGridCell;
var menu = TryFindResource("cellContextMenu") as ContextMenu;
if (menu != null && menu.Items.Count > 0)
{
var menuitem = menu.Items[0] as MenuItem;
if (menuitem != null)
{
var col = obj.Column.Header;
if(col.Equals("Column1") || col.Equals("Column1")
|| col.Equals("Column3") || col.Equals("Column4"))
{
menuitem.Header = "Set all to " + obj;
menu.Visibility = Visibility.Visible;
}
else
{
menu.Visibility = Visibility.Hidden;
}
}
}
}
}
Однако возникает один новый вопрос, все столбцы - DataGridComboBoxColumn, контекстВ меню отображается «Установить все в Microsoft.Windows.Controls.DataGridCell», каждый DataGridComboBoxColumn связан с источником данных, поэтому я не знаю, как получить selectedValue объекта DataGridComboBoxColumn.Итак, мой вопрос, как получить выбранное значение DataGridComboBoxColumn?С другой стороны, если я могу знать, какая строка нажата, то я смогу определить selectedValue из этой строки.но я не знаю, как получить, какая строка щелкает для контекстного меню, либо.спасибо
Редактировать: мне удалось получить это таким образом var comboColumn = (obj.Content as ComboBox);if (comboColumn! = null) {menuitem.Header = "Установить все в" + comboColumn.Text;menu.Visibility = Visibility.Visible;}
Не элегантно, но работает.У кого-нибудь есть лучшее решение, пожалуйста, дайте мне знать.спасибо