我的父页面上有一个工具栏。然后,在加载子页面的工具栏下有一个Frame
元素。是否有“正确”的方式可以从我导航到的子页面中操纵位于父页面中的工具栏?父页面还具有我也要操纵的其他属性。
<Page>
<Grid>
<Grid.RowDefinitions>
<RowDefinition x:Name="ToolbarRowDefinition" Height="46" />
<RowDefinition x:Name="ContentRowDefinition" Height="*" />
</Grid.RowDefinitions>
<local:MyToolbar x:Name="Toolbar"
Grid.Row="0" />
<Frame x:Name="ChildFrame"
Grid.Row="1" />
</Grid>
</Page>
我不认为尝试这样做不是一个坏主意,因为我不知道有任何反对的规则。所有这些都位于视图内,因此我认为尝试从其他视图内访问其他视图级别的元素,方法和属性没有问题。如果我错了,请纠正我。谢谢!
答案 0 :(得分:0)
通常会创建一个“ Shell”页面,其中包含一个应用程序范围的导航结构,并在其中包含一个Frame
,实际上可以显示您的应用程序内容。
有很多方法可以通过页面与Shell进行通信。最简单的解决方案是在外壳程序中提供一个public static
方法来返回当前实例。假设外壳页面名为ShellPage
,则该方法将如下所示
public static ShellPage GetForCurrentView() => (ShellPage)Window.Current.Content;
对此有几个注意事项:
ShellPage
请求来自的窗口。ShellPage
是Window
的主要内容。这不是默认设置,因为默认情况下,App.xaml.cs
中的OnLaunched
方法将根目录内容设置为Frame
,然后将其导航到MainPage
。覆盖此行为并将ShellPage
设置为窗口的根是完全可以的。如果您不想这样做,则必须将上面的代码更改为(ShellPage)((Frame)Window.Current.Content).Content
。ShellPage
,则可能需要更新代码以使用as
以确保获取的是null
而不是如果ShellPage
不存在,则为例外。但这确实取决于您的特定情况。