Я сильно изменил 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 (ListBox), но я вынул, так как ListBox не принадлежит в моей 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 Apps может даже делать IPC.