在我的项目(WPF)中,有一种形式(其中声明了一个对象),该形式包括一个框架,该框架根据所单击的按钮显示不同的页面。 在页面中,我拖动文件并获得路径。如何将路径返回到主窗体,以便可以将其“发送”到对象? (然后该表单中的其他函数将使用它)
主表单的(部分)代码
CSV csv = new CSV();
public MainWindow()
{
InitializeComponent();
Main.Content = new LoadCSVPage();
}
public MainWindow(string path)
{
InitializeComponent();
csv.SetLocation(path);
}
LoadCSV页面的代码
public LoadCSVPage()
{
InitializeComponent();
}
private void LoadCSV_DragEnter(object sender, DragEventArgs e)
{
string filePath = "";
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files)
{
filePath = file;
}
MainWindow main = new MainWindow(filePath);
main.Show();
}
我了解缺少的内容!将变量传递给主构造函数后,我没有显示它(通过main.show)。 既然我已经插入它,它并不能说服我太多。有没有更清洁的方法? 哦,不,有问题。使用main.show会创建一个附加窗口!
答案 0 :(得分:0)
我开始说,有很多方法可以实现您想要的。我看到的第一个问题(即使您没有发布项目的XAML部分)也是两次显示MainWindow:第一次显示时,第二次将文件拖到页面内。
一个想法可能是将Csv对象传递给页面:
public CSV csv = new CSV();
public MainWindow()
{
InitializeComponent();
Main.Content = new LoadCSVPage(csv);
}
public partial class LoadCSVPage: Page
{
private CSV _csv;
public LoadCSVPage(CSV mainCsv)
{
InitializeComponent();
_csv = mainCsv;
}
private void LoadCSV_DragEnter(object sender, DragEventArgs e)
{
string filePath = "";
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
//foreach (string file in files)
//{
//This also is not really clear: what happen if you drag more then one file?
//This way you are cycling for each file, but you are selecting the last`
//filePath = file;
//}
if(files.Length > 0)
{
filePath = files.Last();
}
// Here the csv object can obtain the filePath
_csv.SetLocation(filePath);
}
}
然后您可以直接从页面的方法传递路径。