如果单击datagrid中的行,则打开新窗口

时间:2015-10-14 10:04:57

标签: c# wpf datagrid

我正在制作一个WPF应用程序。我有一个带有静态项目的数据网格。现在我想在点击一行时显示一个新窗口。

我做错了什么?

这是我想要在点击时打开的第二个窗口:WindowMail.cs

using System;

namespace Phish_Finder
{
    internal class WindowMail
    {
        internal void Show()
        {
            WindowMail wm = new WindowMail();
            wm.Show();
        }
    }
}

这是我第一个窗口Mainwindow.xaml.cs

中的方法
   private void DataGrid_MouseDoubleClick(object sender, RoutedEventArgs e)
    {
        var currentRowIndex = URLGRID.Items.IndexOf(URLGRID.CurrentItem);
        {
            if (URLGRID.CurrentItem != null)
            {
                WindowMail wm = new WindowMail();
                wm.Show();
            }
        }
    }

这是我的数据网格

DataGrid x:Name="URLGRID" HorizontalAlignment="Left" Height="400"
Margin="60,300,0,0" VerticalAlignment="Top" Width="1350" Loaded="DataGrid_Loaded" 
MouseDoubleClick="DataGrid_MouseDoubleClick" 

我是WPF的新手,我认为我混淆了应该放置方法的地方。但我不确定。

2 个答案:

答案 0 :(得分:0)

也许是代码

internal class WindowMail
{
    internal void Show()
    {
        WindowMail wm = new WindowMail();
        wm.Show();
    }
}

需要一点改变。我在这里认为WindowMail类实际上是WindowMail.xaml文件之后的cs类。

在这里你需要改变

        WindowMail wm = new WindowMail();
        wm.Show();

进入

this.Show(); //Standard function of a window

否则你的代码会继续重复无限循环......

此外,您需要更改的内容:我相信窗口级别上的功能Show已经存在。所以重命名就像下面一样,或者重写函数。

public void OpenDialog(bool asDialog)
{
    if(asDialog)
        this.ShowDialog();
    else
        this.Show();
}

然后,为了调用你的函数:

private void DataGrid_MouseDoubleClick(object sender, RoutedEventArgs e)
{        
   if (URLGRID.SelectedItem!= null)
   {
       WindowMail wm = new WindowMail();
       wm.OpenDialog(true);
   }        
}

答案 1 :(得分:0)

使用以下代码

private void DataGrid_MouseDoubleClick(object sender, RoutedEventArgs e)
{
    var currentRowIndex = URLGRID.Items.IndexOf(URLGRID.selectedItem);
    {
        if (URLGRID.selectedItem != null)
        {
            WindowMail wm = new WindowMail();
            wm.Show();
        }

    }
}