gpt4 book ai didi

c# - Silverlight:在每个页面上显示相同的控件

转载 作者:行者123 更新时间:2023-11-30 22:42:48 25 4
gpt4 key购买 nike

我正在构建一个 SL4 应用程序。我有两个控件,一个顶部搜索栏和一个底部收藏夹栏,我希望它们出现在每个页面上。我不确定执行此操作的最佳方法是什么。

我目前的方法使用导航框架作为根视觉对象:

App.xaml.cs:

this.RootVisual = new NavFrame();

NevFrame.xaml:

<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>

<my:TopSearchBar x:Name="topSearchBar" Grid.Row="0"/>

<navigation:Frame x:Name="navigationFrame" Source="/HomePage.xaml" Grid.Row="1"/>

<my:BottomFavoritesBar x:Name="bottomFavoritesBar" Grid.Row="2"/>

</Grid>

然后,我将更改框架内的页面,将持久性元素留在原地。这是正确的方法,还是有其他一些首选模式?

但是,如果我这样做,我不确定如何让 TopSearchBarBottomFavoritesBar 用户控件进行导航。 (一般来说,我不确定如何直接从 UserControl 进行导航。)

TopSearchBar 是每个页面的成员时,我会在每个页面的代码隐藏中包含以下代码:

topSearchBar.ParentPage = this;

TopSearchBar 然后可以使用此引用进行导航:

ParentPage.NavigationService.Navigate(new Uri("/SearchPage.xaml?q=" + searchBox.Text, UriKind.Relative));

有更好的方法吗?感觉有些别扭。如果导航需要对页面的引用,我如何从 NavFrame 传递该引用?

最佳答案

适当的方法是向 TopSearchBarBottomFavoritesBar 添加一个名为“Navigator”(或您喜欢的任何类型)的依赖属性,类型为 INavigate

你的 xaml 看起来像这样:-

<Grid x:Name="LayoutRoot" Background="White"> 
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>

<my:TopSearchBar x:Name="topSearchBar" Grid.Row="0" Navigator="{Binding ElementName=navigationFrame}"/>

<navigation:Frame x:Name="navigationFrame" Source="/HomePage.xaml" Grid.Row="1"/>

<my:BottomFavoritesBar x:Name="bottomFavoritesBar" Grid.Row="2" Navigator="{Binding ElementName=navigationFrame}" />

</Grid>

现在在您的两个 Bar 用户控件中,导航很简单:-

Navigator.Navigate(new Uri("/SearchPage.xaml?q=" + searchBox.Text, UriKind.Relative)); 

编辑

要创建依赖属性,请将其添加到您的 TopSearchBar 类:-

    public INavigate Navigator
{
get { return GetValue(NavigatorProperty) as INavigate; }
set { SetValue(NavigatorProperty, value); }
}


public static readonly DependencyProperty NavigatorProperty =
DependencyProperty.Register(
"Navigator",
typeof(INavigate),
typeof(TopSearchBar),
new PropertyMetadata(null));

在您的 BottomFavoritesBar 类中复制它,但更改对 TopSearchBar 的引用。

关于c# - Silverlight:在每个页面上显示相同的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4226248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com