สำหรับผู้ที่ไม่ต้องการสร้างกล่องโต้ตอบที่กำหนดเอง แต่ยังคงต้องการวิธี WPF 100% และไม่ต้องการใช้ DDL แยกต่างหากการพึ่งพาเพิ่มเติมหรือ API ที่ล้าสมัยฉันพบแฮ็คที่ง่ายมากโดยใช้กล่องโต้ตอบบันทึกเป็น
ไม่จำเป็นต้องใช้คำสั่งคุณเพียงแค่คัดลอกโค้ดด้านล่าง!
ควรเป็นมิตรกับผู้ใช้และคนส่วนใหญ่จะไม่สังเกตเห็น
แนวคิดนี้มาจากข้อเท็จจริงที่ว่าเราสามารถเปลี่ยนชื่อของกล่องโต้ตอบนั้นซ่อนไฟล์และแก้ไขชื่อไฟล์ที่เกิดขึ้นได้อย่างง่ายดาย
มันเป็นแฮ็คขนาดใหญ่ที่แน่นอน แต่บางทีมันอาจจะทำงานได้ดีสำหรับการใช้งานของคุณ ...
ในตัวอย่างนี้ฉันมีวัตถุกล่องข้อความเพื่อให้มีเส้นทางผลลัพธ์ แต่คุณสามารถลบบรรทัดที่เกี่ยวข้องและใช้ค่าส่งคืนหากคุณต้องการ ...
// Create a "Save As" dialog for selecting a directory (HACK)
var dialog = new Microsoft.Win32.SaveFileDialog();
dialog.InitialDirectory = textbox.Text; // Use current value for initial dir
dialog.Title = "Select a Directory"; // instead of default "Save As"
dialog.Filter = "Directory|*.this.directory"; // Prevents displaying files
dialog.FileName = "select"; // Filename will then be "select.this.directory"
if (dialog.ShowDialog() == true) {
string path = dialog.FileName;
// Remove fake filename from resulting path
path = path.Replace("\\select.this.directory", "");
path = path.Replace(".this.directory", "");
// If user has changed the filename, create the new directory
if (!System.IO.Directory.Exists(path)) {
System.IO.Directory.CreateDirectory(path);
}
// Our final value is in path
textbox.Text = path;
}
ปัญหาเฉพาะของการแฮ็คนี้คือ:
- ปุ่มตอบรับยังคงบอกว่า "บันทึก" แทนที่จะเป็นบางอย่างเช่น "เลือกไดเรกทอรี" แต่ในกรณีเช่นเหมืองฉัน "บันทึก" การเลือกไดเรกทอรีเพื่อให้ทำงานได้ ...
- ช่องป้อนข้อมูลยังคงระบุว่า "ชื่อไฟล์" แทนที่จะเป็น "ชื่อไดเรกทอรี" แต่เราสามารถพูดได้ว่าไดเรกทอรีเป็นประเภทไฟล์ ...
- ยังมีรายการดร็อปดาวน์ "บันทึกเป็นประเภท" แต่ค่าของมันระบุว่า "ไดเรกทอรี (* .this.directory)" และผู้ใช้ไม่สามารถเปลี่ยนเป็นอย่างอื่นได้ผลสำหรับฉัน ...
คนส่วนใหญ่จะไม่สังเกตเห็นสิ่งเหล่านี้ถึงแม้ว่าฉันจะชอบใช้วิธี WPF อย่างเป็นทางการแน่นอนถ้า Microsoft จะเอาหัวของพวกเขาออกจากลา แต่จนกว่าพวกเขาจะทำนั่นคือการแก้ไขชั่วคราวของฉัน