从动态加载的XAML触发事件

时间:2018-06-19 13:18:36

标签: c# wpf xaml

我在运行时在WPF应用程序中加载XAML文件(页面):

<Frame x:Name="xamlNode"></Frame>

后面的代码:

FileStream s = new FileStream("Page1.xaml", FileMode.Open);  
xamlNode.Source = new Uri("Page1.xaml", UriKind.RelativeOrAbsolute);
xamlNode.NavigationUIVisibility = NavigationUIVisibility.Hidden;
s.Close();

我发现奇怪的第一件事是执行了在Page1.xaml.cs上运行的代码。这个XAML文件不应该没有任何业务逻辑吗?没什么,这就是我所需要的。

但是如何从Page1.xaml.cs在父WPF应用程序中引发事件,例如按下按钮?

我的问题的根源是:我需要用户在VS中设计简单的“页面”,然后在运行时加载。但是当用户在页面上完成某些操作时,我需要一个事件。

1 个答案:

答案 0 :(得分:1)

第一人,对于您的问题,您可以使用UIElement.AddHandler方法来处理任何视觉后代引发的任何路由事件。假设您已经注册了Frame.Loaded事件的处理程序。

private void Frame_Loaded(object sender, RoutedEventArgs e)
{
    ((UIElement)sender).AddHandler(Buttion.ClickEvent, (RoutedEventHandler)((s, e1) =>
    {
        Button btn = (Button)e1.OriginalSource;
        if (btn.Name == "same kind of id")
        {
            // handle the event.
        }
    }));
}

对于Page1.xaml代码执行问题,如果您编译了xaml文件,则将执行该代码,因为您将页面指定为Source的{​​{1}}。我必须指出,Frame与加载Page1.xaml无关。另一方面,如果您使用宽松的xaml作为框架的来源,则xaml不应使用任何代码。因此,请检查Page1.xaml的构建操作。