我在运行时在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中设计简单的“页面”,然后在运行时加载。但是当用户在页面上完成某些操作时,我需要一个事件。
答案 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的构建操作。