C# 从动态加载的XAML引发事件

C# 从动态加载的XAML引发事件,c#,wpf,xaml,C#,Wpf,Xaml,我在WPF应用程序的运行时加载XAML文件(页面): <Frame x:Name="xamlNode"></Frame> 我觉得奇怪的第一件事是,代码是在Page1.xaml.cs上运行的。这个XAML文件不应该没有任何业务逻辑吗?别忘了这是我需要的 但是,如何从Page1.xaml.cs(例如按下按钮)在父WPF应用程序中引发事件 我的问题的根源是:我需要一个用户在VS中设计简单的“页面”,然后在运行时加载。但当用户在该页面上完成某项操作时,我需要一个事件。首先,对于

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

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

我觉得奇怪的第一件事是,代码是在Page1.xaml.cs上运行的。这个XAML文件不应该没有任何业务逻辑吗?别忘了这是我需要的

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


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

首先,对于您的问题,您可以使用
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文件,代码将被执行,因为您将页面指定为
帧的
。我必须指出,
FileStream
与加载Page1.xaml无关。另一方面,如果使用松散的xaml作为帧的源,则xaml不允许使用任何代码。因此,请检查Page1.xaml的构建操作

这应该是可能的。您是否使用了viemodel和MVVM绑定?您是否已将该viewmodel绑定到页面的datacontext?我没有viewmodelOk,因此,在您的用例中,页面有一个按钮。谁来定义当用户点击该按钮时会发生什么?它是在应用程序中定义的还是在页面上定义的?“这个XAML文件不应该没有任何业务逻辑吗?”?这取决于开发者。您应该研究MVVM。这是开发基于XAML的UI应用程序的推荐模式。您想在何时何地向谁发起事件?我在Page1.xaml.cs中有验证逻辑,希望在Page1有效时在我的主应用程序上发起事件。
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.
        }
    }));
}