有人可以向我说明如何设置这样的逻辑:
我有一个WPF控件。按下按钮时,它会执行两个可能的操作之一。
一个。它检查是否已加载不同的WPF窗口。如果是,则触发该窗口的Print方法。 B.它检查是否已加载不同的WPF窗口。如果不是,则实例化该窗口,然后触发其Print方法。
我很难理解两个WPF控件/ Windows之间的事件系统。对我来说这是一个相对较新的事情,所以如果有人带我走过这件事,我将不胜感激。
聚苯乙烯。这不是家庭作业,而是我的新爱好。如果它是一个完全noob的问题,那么请指出我的资源,这样我就可以自学。
干杯!
答案 0 :(得分:1)
首先,您将检查新的Window
是否打开的方式是什么?
您可以通过比较他们的Handle
或他们的Type
(公共类MyWindowWithPrintMethod:Window )来实现此目的。
有多种方法可以做到这一点。
我建议以简单的方式,专注于WPF方式,以最简单的方式解决您的目的。
MyWindowWithPrintMethod obj_MyWindowWithPrintMethod;
private void btnNewWindow_Click(object sender, RoutedEventArgs e)
{
obj_MyWindowWithPrintMethod = new MyWindowWithPrintMethod();
obj_MyWindowWithPrintMethod.Show();
}
private void btnCheckNewWindow_Click(object sender, RoutedEventArgs e)
{
WindowInteropHelper tgtWindow = new WindowInteropHelper(obj_MyWindowWithPrintMethod);
foreach (Window w in Application.Current.Windows)
{
// Compare Handle
WindowInteropHelper wih = new WindowInteropHelper(w);
if (wih.Handle == tgtWindow.Handle)
{
((MyWindowWithPrintMethod)w).Print();
}
// Compare Type
if (w.GetType() == typeof(MyWindowWithPrintMethod))
{
((MyWindowWithPrintMethod)w).Print();
}
}
}
<强> MyWindowWithPrintMethod.cs 强>
public class MyWindowWithPrintMethod : Window
{
public void Print()
{
MessageBox.Show("Print invoked !");
}
}
答案 1 :(得分:0)
来自此answer的question来自2个窗口的事件可能有所帮助:
def main():
mark = 0
file_name = input('Enter the name of the file: ')
lst = []
for num in open(file_name):
lst.append(num.strip())
print(lst)
lst = sort(lst, mark)
print(lst)
def sort(lst, mark):
while mark <= len(lst) - 1:
minval = lst[mark]
for i in range(len(lst)):
if lst[i] > minval:
lst[i], lst[mark] = lst[mark], lst[i]
minval = lst[mark]
mark += 1
sort(lst, mark)
return lst
main()
子窗口
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Child childWindow = new Child();
childWindow.MyEvent += new EventHandler(childWindow_MyEvent);
childWindow.ShowDialog();
}
void childWindow_MyEvent(object sender, EventArgs e)
{
// handle event
MessageBox.Show("Handle");
}
}
上面的代码显示了如何从一个窗口到另一个窗口设置事件。但是,您可能只想在其他窗口中调用方法。对于example:
public partial class Child : Window
{
// define event
public event EventHandler MyEvent;
protected void OnMyEvent()
{
if (this.MyEvent != null)
this.MyEvent(this, EventArgs.Empty);
}
public Child()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(Child_Loaded);
}
void Child_Loaded(object sender, RoutedEventArgs e)
{
// call event
this.OnMyEvent();
}
}
如果您决定坚持使用事件,那么您应该阅读WPF routed events。