आपको इनमें से किसी भी अन्य फैंसी उत्तर की आवश्यकता नहीं है। नीचे एक सरल उदाहरण दिया गया है Margin
, जिसमें XAML में सभी Height
,, Width
गुण सेट नहीं हैं , लेकिन यह दिखाने के लिए पर्याप्त होना चाहिए कि इसे मूल स्तर पर कैसे प्राप्त किया जाए।
XAML
एक निर्माण Window
की तरह आप सामान्य रूप से और यह करने के लिए अपने खेतों जोड़ना होगा पेज, एक का कहना है Label
और TextBox
नियंत्रण एक के अंदर StackPanel
:
<StackPanel Orientation="Horizontal">
<Label Name="lblUser" Content="User Name:" />
<TextBox Name="txtUser" />
</StackPanel>
फिर Button
सबमिशन के लिए एक मानक बनाएं ("ठीक है" या "सबमिट करें") और यदि आप चाहें तो एक "रद्द करें" बटन:
<StackPanel Orientation="Horizontal">
<Button Name="btnSubmit" Click="btnSubmit_Click" Content="Submit" />
<Button Name="btnCancel" Click="btnCancel_Click" Content="Cancel" />
</StackPanel>
कोड-पीछे
आप कोड-पीछे में Click
ईवेंट हैंडलर फ़ंक्शंस जोड़ देंगे , लेकिन जब आप वहां जाते हैं, तो सबसे पहले, एक सार्वजनिक चर घोषित करें, जहां आप अपने टेक्स्टबॉक्स मूल्य को संग्रहीत करेंगे:
public static string strUserName = String.Empty;
फिर, ईवेंट हैंडलर फ़ंक्शंस के लिए ( Click
बटन XAML पर फ़ंक्शन को राइट-क्लिक करें, "गो टू डेफिनिशन" चुनें, यह आपके लिए इसे बनाएगा), आपको यह देखने के लिए चेक की आवश्यकता है कि आपका बॉक्स खाली है या नहीं। आप इसे अपने वैरिएबल में स्टोर करते हैं यदि यह नहीं है, और अपनी विंडो बंद करें:
private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
if (!String.IsNullOrEmpty(txtUser.Text))
{
strUserName = txtUser.Text;
this.Close();
}
else
MessageBox.Show("Must provide a user name in the textbox.");
}
इसे दूसरे पेज से कॉल करना
आप सोच रहे हैं, अगर मैं अपनी खिड़की को उस this.Close()
ऊपर से बंद कर दूं, तो मेरा मान चला गया है, है ना? नहीं!! मुझे यह अन्य साइट से पता चला: http://www.dreamincode.net/forums/topic/359208-wpf-how-to-make-simple-popup-window-for-input/
उनके पास इसी तरह का एक उदाहरण था (मैंने इसे थोड़ा साफ किया) कि कैसे Window
दूसरे से अपने आप को खोलें और मूल्यों को पुनः प्राप्त करें:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void btnOpenPopup_Click(object sender, RoutedEventArgs e)
{
MyPopupWindow popup = new MyPopupWindow(); // this is the class of your other page
//ShowDialog means you can't focus the parent window, only the popup
popup.ShowDialog(); //execution will block here in this method until the popup closes
string result = popup.strUserName;
UserNameTextBlock.Text = result; // should show what was input on the other page
}
}
रद्द करें बटन
आप अच्छी तरह से सोच रहे हैं, उस रद्द बटन के बारे में क्या है, हालांकि? इसलिए हम अपने पॉप-अप विंडो कोड के पीछे एक और सार्वजनिक चर जोड़ते हैं:
public static bool cancelled = false;
और चलो हमारे btnCancel_Click
ईवेंट हैंडलर को शामिल करें, और इसमें एक बदलाव करें btnSubmit_Click
:
private void btnCancel_Click(object sender, RoutedEventArgs e)
{
cancelled = true;
strUserName = String.Empty;
this.Close();
}
private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
if (!String.IsNullOrEmpty(txtUser.Text))
{
strUserName = txtUser.Text;
cancelled = false; // <-- I add this in here, just in case
this.Close();
}
else
MessageBox.Show("Must provide a user name in the textbox.");
}
और फिर हम अपने MainWindow
btnOpenPopup_Click
कार्यक्रम में उस चर को पढ़ते हैं :
private void btnOpenPopup_Click(object sender, RoutedEventArgs e)
{
MyPopupWindow popup = new MyPopupWindow(); // this is the class of your other page
//ShowDialog means you can't focus the parent window, only the popup
popup.ShowDialog(); //execution will block here in this method until the popup closes
// **Here we find out if we cancelled or not**
if (popup.cancelled == true)
return;
else
{
string result = popup.strUserName;
UserNameTextBlock.Text = result; // should show what was input on the other page
}
}
लंबी प्रतिक्रिया, लेकिन मैं यह दिखाना चाहता था कि public static
चर का उपयोग करना कितना आसान है । नहीं DialogResult
, कोई रिटर्निंग वैल्यू नहीं, कुछ भी नहीं। बस खिड़की खोलें, पॉप-अप विंडो में बटन घटनाओं के साथ अपने मूल्यों को संग्रहीत करें, फिर उन्हें मुख्य विंडो फ़ंक्शन में बाद में पुनर्प्राप्त करें।