Нахождение высоты строки в сетке данных WPF - PullRequest
2 голосов
/ 25 января 2012

Может кто-нибудь посоветовать, пожалуйста, как это сделать?

Я пытался

dtgMain.RowHeight;

но это всегда возвращает NAN.

Ответы [ 4 ]

2 голосов
/ 25 января 2012

Получить 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;
}
1 голос
/ 08 декабря 2017

На случай, если кому-нибудь понадобится версия 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)
1 голос
/ 25 января 2012

Это NaN, потому что вы не определили его. Если вы не установите его вручную, это будет определяться результатом измерения содержимого строки.

1 голос
/ 25 января 2012

Это наиболее вероятно, потому что Сетка еще не была отрисована.Проверьте функции «Измерить и упорядочить» для рендеринга сетки, прежде чем пытаться получить RowHeigth.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...