Ori*_*nlk 1 c# wpf xaml user-controls winforms
我有一个主窗口,其中包含一些在 WPF XAML
MainWindow.xaml中初始化的用户控件。
<Grid>
<local:RegularUnit x:Name="ucRegularUnit" Grid.Row="0" />
<local:Actions x:Name="ucActions" Grid.Row="1" />
// .....
</Grid>
Run Code Online (Sandbox Code Playgroud)
我在主窗口中有一个公共函数,我想在单击用户控件中的按钮后调用它。在搜索了一些解决方案后,我找到了一种在我的用户控件类中获取父窗口实例的方法,但是在我使用parentWindow.myFunction().
用户控制RegularUnit.cs:
public partial class RegularUnit : UserControl
{
public RegularUnit()
{
InitializeComponent();
}
private void Button_SearchSerialNumber_Click(object sender, RoutedEventArgs e)
{
Window parentWindow = Window.GetWindow(this);
//parentWindow. //Can't find the function myFunction()
}
}
Run Code Online (Sandbox Code Playgroud)
MainWindow.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public void myFunction()
{
// Do Some Stuff...
}
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么,我该如何解决?
您无法调用myFunction,parentWindow因为它不是标准 WPFWindow类的成员,而是您自定义的MainWindow.
您可以做的是将结果转换为Window.GetWindow(this)to MainWindow,例如
MainWindow parentWindow = (MainWindow) Window.GetWindow(this);
parentWindow.myFunction();
Run Code Online (Sandbox Code Playgroud)
然而,这是一个非常糟糕的类设计,因为现在您的用户控件取决于嵌入到特定窗口中。
您应该做的是向父控件可以订阅的用户控件添加一个事件。
public event EventHandler SerialNumberSearch;
private void Button_SearchSerialNumber_Click(object sender, RoutedEventArgs e)
{
var handler = SerialNumberSearch;
if (handler != null) handler(this, EventArgs.Empty);
}
Run Code Online (Sandbox Code Playgroud)
当然,您可以使用不同类型的 EventHandler,具体取决于您的需要。
| 归档时间: |
|
| 查看次数: |
9714 次 |
| 最近记录: |