2011-04-11 12 views
87

मुझे बटन पर क्लिक करने के लिए WPF/C# में एक आवश्यकता है, कुछ डेटा इकट्ठा करें और फिर इसे उस टेक्स्ट फ़ाइल में रखें जिसे उपयोगकर्ता अपनी मशीन पर डाउनलोड कर सकता है। मैं इसका पहला आधा प्राप्त कर सकता हूं, लेकिन आप उपयोगकर्ता को "इस रूप में सहेजें" संवाद बॉक्स के साथ कैसे संकेत देते हैं? फ़ाइल स्वयं एक साधारण पाठ फ़ाइल होगी।मैं WPF में एक सेव के रूप में संवाद कैसे दिखा सकता हूं?

+7

तो वास्तव में इस प्रश्न को कम किया जा सकता है "मैं डब्ल्यूपीएफ में एक संवाद के रूप में कैसे संवाद दिखा सकता हूं?" – RQDQ

उत्तर

162

दोनों उत्तर अब सिल्वरलाइट SaveFileDialog वर्ग से लिंक करते हैं; WPF variant काफी अलग और अलग नामस्थान है।

Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog(); 
dlg.FileName = "Document"; // Default file name 
dlg.DefaultExt = ".text"; // Default file extension 
dlg.Filter = "Text documents (.txt)|*.txt"; // Filter files by extension 

// Show save file dialog box 
Nullable<bool> result = dlg.ShowDialog(); 

// Process save file dialog box results 
if (result == true) 
{ 
    // Save document 
    string filename = dlg.FileName; 
} 
3

SaveFileDialog class का उपयोग करें।

+0

@Aaron: संकेत के लिए धन्यवाद। मेरे द्वारा इच्छित कक्षा का संदर्भ देने के लिए लिंक को सही किया गया। –

1

आपको केवल SaveFileDialog बनाने की आवश्यकता है, और इसकी ShowDialog विधि को कॉल करें।

+0

-1 एसएल के लिए है; WPF –

+0

@Aaron धन्यवाद, मैं गलत संस्करण से जुड़ा हुआ हूं। मैंने अभी सही जवाब देने के लिए अपना जवाब अपडेट कर दिया है। – Twelve47

20

SaveFileDialog माइक्रोसॉफ्ट.Win32 नेमस्पेस में है - यह आपको इसे समझने के लिए 10 मिनट बचा सकता है।

13

यहां कुछ नमूना कोड है:

string fileText = "Your output text"; 

SaveFileDialog dialog = new SaveFileDialog() 
{ 
    Filter = "Text Files(*.txt)|*.txt|All(*.*)|*" 
}; 

if (dialog.ShowDialog() == true) 
{ 
    File.WriteAllText(dialog.FileName, fileText); 
} 
1

सभी उदाहरण अब तक Win32 नाम स्थान का उपयोग करें, लेकिन वहाँ एक विकल्प है:

FileInfo file = new FileInfo("image.jpg"); 
var dialog = new System.Windows.Forms.SaveFileDialog(); 
dialog.FileName = file.Name; 
dialog.DefaultExt = file.Extension; 
dialog.Filter = string.Format("{0} images ({1})|*{1}|All files (*.*)|*.*", 
    file.Extension.Substring(1).Capitalize(), 
    file.Extension); 
dialog.InitialDirectory = file.DirectoryName; 

System.Windows.Forms.DialogResult result = dialog.ShowDialog(this.GetIWin32Window()); 
if (result == System.Windows.Forms.DialogResult.OK) 
{ 

} 

मैं एक विस्तार विधि का उपयोग कर रहा हूँ दृश्य नियंत्रण से IWin32Window प्राप्त करने के लिए:

#region Get Win32 Handle from control 
public static System.Windows.Forms.IWin32Window GetIWin32Window(this System.Windows.Media.Visual visual) 
{ 
    var source = System.Windows.PresentationSource.FromVisual(visual) as System.Windows.Interop.HwndSource; 
    System.Windows.Forms.IWin32Window win = new OldWindow(source.Handle); 
    return win; 
} 

private class OldWindow : System.Windows.Forms.IWin32Window 
{ 
    private readonly System.IntPtr _handle; 
    public OldWindow(System.IntPtr handle) 
    { 
     _handle = handle; 
    } 

    System.IntPtr System.Windows.Forms.IWin32Window.Handle 
    { 
     get { return _handle; } 
    } 
} 
#endregion 

Capitalize() भी एक विस्तार विधि है, लेकिन उल्लेखनीय नहीं है क्योंकि वहां एक स्ट्रिंग के पहले अक्षर को कैपिटल करने के कई उदाहरण हैं।

+0

आप 'GetIWin32Window' का उपयोग कैसे करते हैं? – cMinor

संबंधित मुद्दे

 संबंधित मुद्दे