天天看點

WPF 之 視窗間傳參數

  有如下幾種方式:

  1) 聲明個全局變量,就是App.xaml裡面聲明;在所有窗體裡面都可以引用 Application.Current.Properties["ArgumentName"];

  2) 第二個就是 在目标窗體上面公開個 屬性,直接指派;

  3) 最後就是在Uri裡面傳參數 NavigationService.Navigate(window object,argument value)

  4) 采用事件響應,傳遞值。 

  以下以執行個體具體說明事件響應傳值:點選主視窗MainWindow 上的一個OpenSubWindow按鈕 -> 打開子視窗SubWindow -> 在子視窗中的TextBox中輸入值, 點選OK後關閉 -> 主視窗上的TextBox擷取子視窗中的值。

4、事件響應傳值。 

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(); 
        }
    }