我正在使用Popup(System.Windows.FrameworkElement.Popup)向用户显示注释,例如: 他超过了文本框中的最大字符串长度。
我正在使用PlacementTarget属性来指定frameworkElement,以确保Popup显示在相应控件附近而不是鼠标指针附近。
对于普通的textBox,一切正常,但在数据网格中使用弹出窗口会产生问题。
使用带有PlacementTarget的弹出窗口= theDataGrid正在运行,但弹出窗口显示在数据网格的左上角 (使用Placement = PlacementMode.Left)但我想显示触发弹出窗口显示的单元格附近的弹出窗口。
现在我使用以下代码来确定相应的DataGridCell:
static DataGridCell TryToFindGridCell(DataGrid grid, DataGridCellInfo cellInfo)
{
DataGridCell result = null;
DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(cellInfo.Item);
if (row != null)
{
int columnIndex = grid.Columns.IndexOf(cellInfo.Column);
if (columnIndex > -1)
{
DataGridCellsPresenter presenter = VisualTreeHelperMethods.GetVisualChild<DataGridCellsPresenter>(row);
result = presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex) as DataGridCell;
}
}
return result;
}
似乎工作正常,但使用DataGridCell(与DataGridCellInfo形成对比的FrameworkElement)具有效果,
弹出窗口显示在DataGridCell附近的正确位置
但是空的
任何人都可以帮助或解释为什么弹出窗口是空的吗?
现在我坚持使用PlacementTarget = theDataGrid来显示弹出窗口,但这有点令人不满意。