C# 如何将UserControl事件用于MainWindow
我正在使用MVVM模式创建一个WPF应用程序 在我的应用程序中,我有一个像应用程序的主模板一样工作的主窗口。我在C# 如何将UserControl事件用于MainWindow,c#,wpf,mvvm,user-controls,C#,Wpf,Mvvm,User Controls,我正在使用MVVM模式创建一个WPF应用程序 在我的应用程序中,我有一个像应用程序的主模板一样工作的主窗口。我在UserControl中创建了一个类似于菜单的TreeView 在主窗口中,所有演示文稿都位于选项卡控件中,因此myTreeView中的每个项目实际上都是一个新选项卡 选项卡控件在主窗口上定义 因此,我的问题是,当TreeView的事件处理程序位于UserControls代码隐藏文件而不在主窗口文件中,因此我无法与它交互时,如何在当前选项卡控件中打开新选项卡(按TreeView中的项目
UserControl
中创建了一个类似于菜单的TreeView
在主窗口中,所有演示文稿都位于选项卡控件中,因此myTreeView
中的每个项目实际上都是一个新选项卡
选项卡控件在主窗口上定义
因此,我的问题是,当TreeView
的事件处理程序位于UserControls
代码隐藏文件而不在主窗口文件中,因此我无法与它交互时,如何在当前选项卡控件中打开新选项卡(按TreeView
中的项目)
是否可以在主窗口的代码隐藏文件中托管
TreeView
的事件处理程序?您应该可以这样做
Usercontrol.xaml
<TreeView SelectedItemChanged="TreeViewHandler" />
<local:myUsercontrol TreeViewSelectedItemChanged="myHandler" />
Usercontrol.cs
public delegate void TreeViewSelectedItemHandler(object sender, RoutedPropertyChangedEventArgs<object> e);
public event TreeViewSelectedItemHandler TreeViewSelectedItemChanged;
private void TreeViewHandler(object sender, RoutedPropertyChangedEventArgs<object> e)
{
//Capture event from usercontrol and execute defined event
if (TreeViewSelectedItemChanged != null)
{
TreeViewSelectedItemChanged(sender, e);
}
}
private void myHandler(object sender, RoutedPropertyChangedEventArgs<object> e)
{
//Do stuff
}
public委托void TreeViewSelectedItemHandler(对象发送方,RoutedPropertyChangedEventArgs e);
公共事件TreeViewSelectedItemHandler TreeViewSelectedItemChanged;
私有void TreeViewHandler(对象发送方,RoutedPropertyChangedEventArgs e)
{
//从usercontrol捕获事件并执行定义的事件
if(TreeViewSelectedItemChanged!=null)
{
TreeViewSelectedItemChanged(发送方,e);
}
}
Window.xaml
<TreeView SelectedItemChanged="TreeViewHandler" />
<local:myUsercontrol TreeViewSelectedItemChanged="myHandler" />
Window.cs
public delegate void TreeViewSelectedItemHandler(object sender, RoutedPropertyChangedEventArgs<object> e);
public event TreeViewSelectedItemHandler TreeViewSelectedItemChanged;
private void TreeViewHandler(object sender, RoutedPropertyChangedEventArgs<object> e)
{
//Capture event from usercontrol and execute defined event
if (TreeViewSelectedItemChanged != null)
{
TreeViewSelectedItemChanged(sender, e);
}
}
private void myHandler(object sender, RoutedPropertyChangedEventArgs<object> e)
{
//Do stuff
}
private void myHandler(对象发送方,RoutedPropertyChangedEventArgs e)
{
//做事
}
您应该能够执行类似的操作
Usercontrol.xaml
<TreeView SelectedItemChanged="TreeViewHandler" />
<local:myUsercontrol TreeViewSelectedItemChanged="myHandler" />
Usercontrol.cs
public delegate void TreeViewSelectedItemHandler(object sender, RoutedPropertyChangedEventArgs<object> e);
public event TreeViewSelectedItemHandler TreeViewSelectedItemChanged;
private void TreeViewHandler(object sender, RoutedPropertyChangedEventArgs<object> e)
{
//Capture event from usercontrol and execute defined event
if (TreeViewSelectedItemChanged != null)
{
TreeViewSelectedItemChanged(sender, e);
}
}
private void myHandler(object sender, RoutedPropertyChangedEventArgs<object> e)
{
//Do stuff
}
public委托void TreeViewSelectedItemHandler(对象发送方,RoutedPropertyChangedEventArgs e);
公共事件TreeViewSelectedItemHandler TreeViewSelectedItemChanged;
私有void TreeViewHandler(对象发送方,RoutedPropertyChangedEventArgs e)
{
//从usercontrol捕获事件并执行定义的事件
if(TreeViewSelectedItemChanged!=null)
{
TreeViewSelectedItemChanged(发送方,e);
}
}
Window.xaml
<TreeView SelectedItemChanged="TreeViewHandler" />
<local:myUsercontrol TreeViewSelectedItemChanged="myHandler" />
Window.cs
public delegate void TreeViewSelectedItemHandler(object sender, RoutedPropertyChangedEventArgs<object> e);
public event TreeViewSelectedItemHandler TreeViewSelectedItemChanged;
private void TreeViewHandler(object sender, RoutedPropertyChangedEventArgs<object> e)
{
//Capture event from usercontrol and execute defined event
if (TreeViewSelectedItemChanged != null)
{
TreeViewSelectedItemChanged(sender, e);
}
}
private void myHandler(object sender, RoutedPropertyChangedEventArgs<object> e)
{
//Do stuff
}
private void myHandler(对象发送方,RoutedPropertyChangedEventArgs e)
{
//做事
}
@pilixonis如果答案对你合适,就接受它吧。谢谢。@pilixonis如果答案对你有用,就接受吧。谢谢