所有
我正在使用用户界面来控制使用wpf的视频会议编解码器。对于这个例子,我只需要页面。一个主页,作为一些快捷方式和基本控件以及一个高级页面。
这是我的问题,我在主页面上实例化编解码器控件类,但在高级页面上无法访问它。我不知道如何让两个页面都可以使用编解码器控件类。
这是一个片段(为清晰起见,我没有包含命名空间)
MainWindow.xaml.cs
using CodecControl;
public partial class MainWindow:Window
{
Codec codec = new Codec();
public MainWindow();
{
InitializeComponent();
}
private void btnAdvanced_Click(object sender, RoutedEventArgs e)
{
_mainframe.NavigationService.Navigate(new Uri("Advanced.xaml",UriKind.Relative));
}
//there are various shortcut buttons below here
}
AdvancedPage
public partial class AdvancedPage : Page
{
InitializeComponent();
}
private void btnConnect(object sender, RoutedEventArgs e)
{
codec.Connect(ipAddress,port);
}
//other controls below
似乎我应该能够实例化该类,然后在其他页面上使用它,因为它们都是同一主窗口的所有部分。我错过了什么?
感谢您的帮助。 规范
答案 0 :(得分:0)
根据提供的不完整的代码示例,只有一种似乎可以直接应用的机制。也就是说,使用NavigationService.Navigate(Uri, Object)
重载:
public partial class MainWindow:Window
{
Codec codec = new Codec();
public MainWindow();
{
InitializeComponent();
}
private void btnAdvanced_Click(object sender, RoutedEventArgs e)
{
_mainframe.NavigationService.Navigated += NavigationService_Navigated;
_mainframe.NavigationService.Navigate(
new Uri("Advanced.xaml", UriKind.Relative), codec);
}
private void NavigationService_Navigated(object sender, NavigationEventArgs e)
{
((AdvancedPage)e.Content).Codec = (Codec)e.ExtraData;
_mainframe.NavigationService.Navigated -= NavigationService_Navigated;
}
//there are various shortcut buttons below here
}
请注意,要使上述工作正常,您的AdvancedPage
类需要一个Codec
属性,可用于设置Codec
引用。
可能工作的另一种替代方法,取决于您选择使用Uri
重载的原因,是自己创建AdvancedPage
对象并将其传递给{{1方法:
Navigate(Object)
显然,您需要在_mainframe.NavigationService.Navigate(new AdvancedPage(codec));
类中添加构造函数,以将AdvancedPage
引用作为参数。
或者您可以使用上述两者的混合,具有Codec
属性,但在导航到该对象之前将其分配给本地创建的AdvancedPage.Codec
对象。然后你只需要添加属性,而不是新的构造函数。
如果在您的方案中这些似乎都没有用,那么您需要改进您的问题,以便它包含一个好的Minimal, Complete, and Verifiable code example。