0

Мне нужно установить динамический datapager PageSize в зависимости от ActualHeight сетки, которая «включает» xaml, над которым я работаю. Мне нужно получить доступ к этой Grid из включенного кода XAML, и я продолжаю получать ошибки «ссылки на объект».Ссылка на объект xaml из другого кода xaml's?

Вот как сетка определяются в «родительском» Main.xaml файла:

<Grid x:Name="GridContent" MaxHeight="500" MinHeight="400" Grid.ColumnSpan="1" ScrollViewer.VerticalScrollBarVisibility="Auto" /> 

А вот как я пытаюсь получить доступ к нему в моем Page.xaml.cs:

Grid gridContent = baseProject.Main.GridContent; 

Это возвращает ошибку «ссылка на объект» в отношении GridContent.

Я также попытался создать общедоступный Accessor для GridContent в Main.xaml.cs, но когда я вызываю его из Page.xaml.cs, я все равно получаю ошибку «ссылка на объект», на этот раз о «baseProject.Main .gridContentAccessor.get».

Что мне не хватает? Как я могу ухватиться за экземпляр этой сетки?

+0

На самом деле, я нашел решение, которое отклоняет необходимость в этом значении высоты: поскольку в этой сетке «GridContent» интегрирован параметр Page.xaml, я могу просто использовать ActualHeight элемента «UserControl» в файле page.xaml, который логически соответствует ActualHeight GridContent. Это точно не отвечает на вопрос (например, «как получить доступ к элементу из другого файла xaml»), так как я нашел альтернативное решение, но я просто хотел сообщить здесь, что моя проблема решена. – SylvainB

ответ

0

Посмотрите на функции VisualTreeHelper. Попробуйте что-нибудь вдоль линий рекурсивной функции, которая вызывает VisualTreeHelper.GetParent (это), пока не найдет объект, который вы хотите.

+0

Я заранее извиняюсь, если есть недоразумение, но я не верю, что существует фактическое отношение «родитель/ребенок» между этими двумя классами. «Page.xaml» - это только одна из многих страниц, которая включена в грид, которая определена в «Main.xaml». Поэтому мое упоминание о Main.xaml как о «родительском», вероятно, было более вульгаризацией, чем фактическое. – SylvainB

+0

После того, как xaml обработан и отображен, вы можете думать обо всех пользовательских элементах как «сплющенных». Сетка на вашем main.xaml содержит пользовательское управление, известное как page.xaml. Поэтому, если вы продолжаете вызывать GetParent снова и снова и во время выполнения, передавая результат предыдущего вызова в качестве параметра, вы должны в конечном итоге получить желаемое содержимое main.xaml. – PaulMolloy

+0

Действительно, теперь я понимаю, что вы имели в виду. Хотя вы также можете просто вызвать метод «Родительский()» на любом элементе FrameworkElement, который, я думаю, довольно аккуратный! Но немного повторяющийся в коде. – SylvainB