Может кто-нибудь, пожалуйста, посоветуйте мне, как это сделать?Поиск высоты строки в WPF datagrid
Я попытался
dtgMain.RowHeight;
, но это всегда возвращает NaN.
Может кто-нибудь, пожалуйста, посоветуйте мне, как это сделать?Поиск высоты строки в WPF datagrid
Я попытался
dtgMain.RowHeight;
, но это всегда возвращает NaN.
Это, скорее всего, из-за того, что сетка еще не была отображена. Check Out The Measure & Упорядочить функции для рендеринга сетки, прежде чем пытаться получить RowHeigth.
Я действительно думал, что это может быть проблемой, и попытался аннулировать сетку, чтобы заставить ее визуализировать. Вы могли бы написать небольшой пример кода, пожалуйста? – user589195
Это NaN, потому что вы не определили его. Если вы не установите его вручную, это определяется результатом измерения содержимого строки.
Не могли бы вы немного расширить ответ? – user589195
Получить DataGridRow с помощью VisualTreeHelper из сетки данных. Затем используйте свойство ActualHeight в DataGridRow.
public static T GetFirstVisualChild<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
return (T)child;
}
T childItem = GetFirstVisualChild<T>(child);
if (childItem != null) return childItem;
}
}
return null;
}
Тогда:
DataGridRow row = GetFirstVisualChild<DataGridRow>(dtgMain);
if(row != null)
{
row.ActualHeight;
}
Попытка сделать это, но получить ошибку Аргументы типа для метода 'OpenStackupGui.MainWindow.GetFirstVisualChild
Вы указали тип при вызове GetFirstVisualChild
Ошибка в этой строке в методе GetFirstVisualChild. - T childItem = GetFirstVisualChild (дочерний элемент); – user589195
В случае, если кто нуждается в версии VB.NET эти дни ...
Public Shared Function GetFirstVisualChild(Of T As DependencyObject)(depObj As DependencyObject) As T
If (depObj IsNot Nothing) Then
Dim i As Integer
For i = 0 To VisualTreeHelper.GetChildrenCount(depObj) - 1
Dim child As DependencyObject = VisualTreeHelper.GetChild(depObj, i)
If (child IsNot Nothing AndAlso TypeOf child Is T) Then
Return CType(child, T)
End If
Dim childItem As T = GetFirstVisualChild(Of T)(child)
If (childItem IsNot Nothing) Then Return childItem
Next
End If
Return Nothing
End Function
затем
Dim row As DataGridRow = CType(GetFirstVisualChild(Of DataGridRow)(grid), DataGridRow)
возвращает NaN его еще потому (ваши строки всегда считаются содержимым). set оно вернет значение. –
В любом случае, я могу найти, что такое предполагаемая высота строки? – user589195
это просто NaN. В элементах WPF разрешено иметь NaN как Height, это просто означает, что размер продиктован содержимым, а не явно указывается. Вы можете попытаться вызвать Measure (double.PositiveInfinity, double.PositiveInfinity) и последовать за DesiredSize. однако, это не гарантируется. –