有如下几种方式:
1. 声明个全局变量,就是App.xaml里面声明;在所有窗体里面都可以引用 Application.Current.Properties["ArgumentName"];
2. 第二个就是 在目标窗体上面公开个 属性,直接赋值;
3. 最后就是在Uri里面传参数 NavigationService.Navigate(window object,argument value)
4. 采用事件响应,传递值。
举例:点击主窗口MainWindow 上的一个OpenSubWindow按钮 -> 打开子窗口SubWindow -> 在子窗口中的TextBox中输入值, 点击OK后关闭 -> 主窗口上的TextBox获取子窗口中的值。
1. 在子窗口中定义一个事件PassValuesEvent。 当点击 OK 按钮时,触发事件,并传递数值。( PassValuesEventArgs 是EventArgs类,需要同时定义好)
public partial class SubWindow : Window
{
public delegate void PassValuesHandler(object sender, PassValuesEventArgs e);
public event PassValuesHandler PassValuesEvent;
public SubWindow()
{
InitializeComponent();
}
private void btnOK_Click(object sender, RoutedEventArgs e)
{
string value1 = tbValue1.Text; // Text Property return value is string type .
int value2;
Int32.TryParse(tbValue2.Text, out value2);
PassValuesEventArgs args = new PassValuesEventArgs(value1, value2);
PassValuesEvent(this, args);
this.Close();
}
}
2. 在主窗口中的OpenSubWindow按钮点击的方法中,订阅了PassValuesEvent事件。当事件触发时,获取传递的参数的值。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void btnOpenSubWindow_Click(object sender, RoutedEventArgs e)
{
SubWindow subWindow = new SubWindow();
// 订阅事件
subWindow.PassValuesEvent += new SubWindow.PassValuesHandler(ReceiveValues);
subWindow.Show();
}
private void ReceiveValues(object sender, PassValuesEventArgs e)
{
this.tbValue1.Text = e.Value1;
this.tbValue2.Text = e.Value2.ToString();
}
}