none
可不可以给“ChildWindow”传入参数? RRS feed

  • 问题

  • 可不可以给“ChildWindow”传入参数???

    private void SiPingRuiAn_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                GisChartWindow gischartwindow = new GisChartWindow();
                gischartwindow.Show();
            }

    问题:“ChildWindow”在执行“Show”时,我们可否对其传入参数???


    Science and technology is my lover.

    2012年9月3日 2:34

答案

  • 注意public GisCHartWindow()函数,是在实例化对象的时候调用的。

      GisChartWindow gischartwindow = new GisChartWindow(); //在这里执行
      gischartwindow.Title = "A楼";
      gischartwindow.Tag = "B001";
      gischartwindow.Show();

    因此导致你的值取不到。

    解决此问题的一个方法就是我之前的代码中的,在IsVisiableChanged事件中处理这两个对象,当然你也可以显示地调用一个初始化的方法,例如在SubWindow中如下定义:

            public void Initialize() {
                if (this.Tag != null) {
                    // to do
                }
                if (this.Title != null) {
                    // to do
                }
            }

    MainWindow:

    private void SiPingRuiAn_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { GisChartWindow gischartwindow = new GisChartWindow(); gischartwindow.Title = "A楼"; gischartwindow.Tag = "B001"; gischartwindow.Initialize(); //在这里调用 gischartwindow.Show(); }



    Wanpeng wanpeng.ones@gmail.com

    2012年9月3日 8:12

全部回复

  • 你不必纠结于Show函数,而是应该考虑整个SubWindow的结构。

    你可以在SubWindow中声明一个公开的属性,从而可以在窗口的初始化或者某些事件中使用这些属性进行初始化工作。

    下面是一个简单的在窗口的Visibility属性变化时初始化实例。

    SubWindow中:

        <Grid>
            <Label Content="{Binding Title}" />
        </Grid>


            public object Data { set; get; }
    
            public SubWindow() {
                InitializeComponent();
                this.IsVisibleChanged += new DependencyPropertyChangedEventHandler(SubWindow_IsVisibleChanged);
            }
    
            void SubWindow_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) {
                if (this.Data != null) {
                    this.DataContext = Data;
                }
            }

    MainWindow中:

        <Grid>
            <StackPanel>
                <TextBox Name="inputTitle" />
                <Button Content="Show Window" Click="ShowWindow_Click" />
            </StackPanel>
        </Grid>

            private void ShowWindow_Click(object sender, RoutedEventArgs e) {
                var data = new {
                    Title = inputTitle.Text
                };
                SubWindow window = new SubWindow();
                window.Data = data;
                window.Show();
            }


    Wanpeng wanpeng.ones@gmail.com

    2012年9月3日 3:17
  • 大师,可以给“ChildWindow”赋值,但是取不到“ChildWindows”它的“Tile和Tag”的值啊。


    1、赋值
     private void SiPingRuiAn_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
      {
      GisChartWindow gischartwindow = new GisChartWindow();
      gischartwindow.Title = "A楼";
      gischartwindow.Tag = "B001";
      gischartwindow.Show();
      }


    2、取值
      public GisChartWindow()
      {
      InitializeComponent();
      string str1 = this.Title.ToString();
      string str2 = this.Tag.ToString();
    问题:这两个提示找不到对象,“未将对象引用到对象实例”,Why???

    要在“ChildWindow”中获取“Title”和“Tag”应该怎样做???



      }

    Science and technology is my lover.

    2012年9月3日 7:34
  • 注意public GisCHartWindow()函数,是在实例化对象的时候调用的。

      GisChartWindow gischartwindow = new GisChartWindow(); //在这里执行
      gischartwindow.Title = "A楼";
      gischartwindow.Tag = "B001";
      gischartwindow.Show();

    因此导致你的值取不到。

    解决此问题的一个方法就是我之前的代码中的,在IsVisiableChanged事件中处理这两个对象,当然你也可以显示地调用一个初始化的方法,例如在SubWindow中如下定义:

            public void Initialize() {
                if (this.Tag != null) {
                    // to do
                }
                if (this.Title != null) {
                    // to do
                }
            }

    MainWindow:

    private void SiPingRuiAn_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { GisChartWindow gischartwindow = new GisChartWindow(); gischartwindow.Title = "A楼"; gischartwindow.Tag = "B001"; gischartwindow.Initialize(); //在这里调用 gischartwindow.Show(); }



    Wanpeng wanpeng.ones@gmail.com

    2012年9月3日 8:12