2013-02-21 77 views
0

我已经大量修改了MS mandelbrot example,并且基于它发布应用程序的一半。类之间的通信

我想将页面链接到一起,但我注意到主类没有访问任何辅助类。

这些类看起来与页面紧密耦合,主类看起来能够创建并加载这些页面,而不需要获取类的句柄(我可以将一个事件绑定到一个委托)。

从MainPage.xaml.cs中:

public void LoadScenario(Type scenarioClass) 
{ 
    AutoSizeInputSectionWhenSnapped = true; 

    // Load the ScenarioX.xaml file into the Frame. 
    HiddenFrame.Navigate(scenarioClass, this); 

    if (scenarioClass == typeof(TitleScreen)) 
    { 
     // connect event handler here? how? 
     //  EventHandler e = scenarioClass.PageEventHandler(HandleChangePageCall); 
     // scenarioClass is a Type, so any events are not in scope 
    } 

    // Get the top element, the Page, so we can look up the elements 
    // that represent the input and output sections of the ScenarioX file. 
    Page hiddenPage = HiddenFrame.Content as Page; 

    // Get each element. 
    UIElement input = hiddenPage.FindName("Input") as UIElement; 
    UIElement output = hiddenPage.FindName("Output") as UIElement; 
    UIElement entireScreen = hiddenPage.FindName("LayoutRoot") as UIElement; 

    if (entireScreen == null) 
    { 
     // Malformed input section. 
     NotifyUser(String.Format(
      "Cannot load this screen: {0}. Make sure root of input section markup has x:Name of 'entireScreen'", 
      scenarioClass.Name), NotifyType.ErrorMessage); 
     return; 
    } 

    if (output == null) 
    { 
     // Malformed input section. 
     NotifyUser(String.Format(
      "Cannot load this screen: {0}. Make sure root of input section markup has x:Name of 'Output'", 
      scenarioClass.Name), NotifyType.ErrorMessage); 
     return; 
    } 

    // Find the LayoutRoot which parents the input and output sections in the main page. 
    Panel panel = hiddenPage.FindName("LayoutRoot") as Panel; 

    if (panel != null) 
    { 
     // Get rid of the content that is currently in the intput and output sections. 
     panel.Children.Remove(input); 
     panel.Children.Remove(output); 
     //panel.Children.Remove(entireScreen); 

     //// Populate the input and output sections with the newly loaded content. 
     //InputSection.Content = input; 
     OutputSection.Content = output; 
     //OutputSection.Content = entireScreen; // doesn't fall within the expected range 
    } 
    else 
    { 
     // Malformed Scenario file. 
     NotifyUser(String.Format(
      "Cannot load scenario: '{0}'. Make sure root tag in the '{0}' file has an x:Name of 'LayoutRoot'", 
      scenarioClass.Name), NotifyType.ErrorMessage); 
    } 
} 

这些类/页面被紧紧地绑定到UI控件(列表框),但我还是把说出来,因为列表框并没有在我的userflow属于。

而且在MainPage.xaml.cs:

// Change the array below to reflect the name of your scenarios. 
// This will be used to populate the list of scenarios on the main page with 
// which the user will choose the specific scenario that they are interested in. 
// These should be in the form: "Navigating to a web page". 
// The code in MainPage will take care of turning this into: "1) Navigating to a web page" 
List<Scenario> scenarios = new List<Scenario> 
{ 
    new Scenario() { Title = "Main Title", ClassType = typeof(TitleScreen) }, 
    new Scenario() { Title = "Images from a file stream", ClassType = typeof(Scenario2) }, 
    new Scenario() { Title = "Displaying a NineGrid image", ClassType = typeof(Scenario3) }, 
    new Scenario() { Title = "Using a WriteableBitmap", ClassType = typeof(Scenario4) } 
}; 

我应该修改方案类来保存所有这些情景实例?

或者我应该设置某种IPC来传回信息吗?我不确定Windows应用程序是否可以执行IPC。

回答

0

显然MainPage类有一个静态引用本身,这样我就可以调用从二级页面改变二级页面:

// in the secondary page: 
MainPage rootPage = MainPage.Current; 
rootPage.SetScreen(2); 

// definition in the MainPage class: 
public static MainPage Current;