【问题标题】:Reference xaml object from another xaml's codebehind?从另一个 xaml 的代码隐藏中引用 xaml 对象?
【发布时间】:2015-08-07 20:37:14
【问题描述】:

我必须根据“包含”我正在处理的 xaml 的网格的 ActualHeight 设置动态数据分页器 PageSize。我需要从包含的 XAML 代码隐藏中访问此网格,并且我不断收到“需要对象引用”错误。

这是在“父”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 的“需要对象引用”错误。

我还尝试在 Main.xaml.cs 中为 GridContent 创建一个公共访问器,但是当我从 Page.xaml.cs 调用它时,我仍然收到“需要对象引用”错误,这次是关于“baseProject.Main. gridContentAccessor.get"。

我错过了什么?我怎么可能得到这个 Grid 的实例?

【问题讨论】:

  • 其实没关系,我找到了一个不需要这个高度值的解决方案:由于 Page.xaml 集成在这个“GridContent”网格中,我可以只使用“UserControl”元素的 ActualHeight Page.xaml,在逻辑上匹配 GridContent 的 ActualHeight。这并不能完全回答问题(即“如何从另一个 xaml 文件访问元素”),因为我找到了替代解决方案,但我只想在这里通知我的问题已解决。

标签: xaml silverlight-4.0 instance code-behind object-reference


【解决方案1】:

看看 VisualTreeHelper 函数。 尝试调用 VisualTreeHelper.GetParent(this) 的递归函数,直到找到所需的对象。

【讨论】:

  • 如果有误解,我提前道歉,但我不相信这两个类之间存在实际的“父/子”关系。 “Page.xaml”只是“Main.xaml”中定义的网格中包含的众多页面之一。所以我提到 Main.xaml 作为“父母”可能比事实更庸俗。
  • 一旦处理和呈现了 xaml,您可以将所有用户控件视为“扁平化”。 main.xaml 上的 Grid 包含称为 page.xaml 的用户控件。因此,如果您在运行时一遍又一遍地调用 GetParent,将上一次调用的结果作为参数传递,您最终应该会得到您想要的 main.xaml 内容。
  • 确实,我现在明白你的意思了。虽然您也可以在任何 FrameworkElement 上调用“Parent()”方法,我认为这非常简洁!但在代码中有点重复。
猜你喜欢
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
相关资源
最近更新 更多