在多个WPF页面上使用类

时间:2017-05-01 19:03:20

标签: c# wpf

所有

我正在使用用户界面来控制使用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

似乎我应该能够实例化该类,然后在其他页面上使用它,因为它们都是同一主窗口的所有部分。我错过了什么?

感谢您的帮助。 规范

1 个答案:

答案 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