उन लोगों के लिए जो एक कस्टम संवाद नहीं बनाना चाहते हैं, लेकिन फिर भी 100% WPF तरीका पसंद करते हैं और अलग DDLs, अतिरिक्त निर्भरता या पुराने APIs का उपयोग नहीं करना चाहते हैं, मैं Save As डायलॉग का उपयोग करके बहुत ही सरल हैक के साथ आया हूं।
आवश्यक निर्देश का उपयोग नहीं, आप बस नीचे दिए गए कोड को कॉपी-पेस्ट कर सकते हैं!
यह अभी भी बहुत उपयोगकर्ता के अनुकूल होना चाहिए और अधिकांश लोग कभी नोटिस नहीं करेंगे।
विचार इस तथ्य से आता है कि हम उस संवाद का शीर्षक बदल सकते हैं, फ़ाइलें छिपा सकते हैं, और परिणामी फ़ाइल नाम के आसपास बहुत आसानी से काम कर सकते हैं।
यह सुनिश्चित करने के लिए एक बड़ी हैक है, लेकिन शायद यह आपके उपयोग के लिए ठीक काम करेगा ...
इस उदाहरण में मेरे पास परिणामी पथ को शामिल करने के लिए एक टेक्स्टबॉक्स ऑब्जेक्ट है, लेकिन आप संबंधित लाइनों को हटा सकते हैं और यदि आप चाहें तो रिटर्न वैल्यू का उपयोग कर सकते हैं ...
// 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;
}
इस हैक के साथ केवल मुद्दे हैं:
- पावती बटन अभी भी "सेलेक्ट डाइरेक्टरी" जैसी किसी चीज़ के बजाय "सेव" कहता है, लेकिन माइंस जैसे मामले में मैं डाइरेक्टरी सिलेक्शन को "सेव" करता हूँ इसलिए यह अभी भी काम करता है ...
- इनपुट फ़ील्ड अभी भी "निर्देशिका नाम" के बजाय "फ़ाइल नाम" कहती है, लेकिन हम कह सकते हैं कि एक निर्देशिका एक प्रकार की फ़ाइल है ...
- अभी भी "Save as type" ड्रॉपडाउन है, लेकिन इसका मान "निर्देशिका (* .this.directory)" कहता है, और उपयोगकर्ता इसे किसी और चीज़ के लिए नहीं बदल सकता है, मेरे लिए काम करता है ...
अधिकांश लोग इन पर ध्यान नहीं देंगे, हालांकि मैं निश्चित रूप से एक आधिकारिक WPF तरीके का उपयोग करना पसंद करूंगा यदि Microsoft उनके सिर को अपने गधे से बाहर निकाल देगा, लेकिन जब तक वे ऐसा नहीं करते, यह मेरा अस्थायी सुधार है।