Вам не потрібна БІЛЬКА з цих інших вигадливих відповідей. Нижче наведено спрощений приклад , який не має все Margin, Height, Widthвластивості , встановлені в XAML, але має бути достатньо , щоб показати , як отримати це зроблено на базовому рівні.
XAML
Створіть Windowсторінку, як зазвичай, і додайте на неї свої поля, скажіть a Labelта TextBoxкеруйте всередині a StackPanel:
<StackPanel Orientation="Horizontal">
<Label Name="lblUser" Content="User Name:" />
<TextBox Name="txtUser" />
</StackPanel>
Потім створіть стандарт Buttonдля подання ("OK" або "Submit") і кнопку "Скасувати", якщо хочете:
<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, немає повернутих значень, нічого. Просто відкрийте вікно, збережіть свої значення з подіями кнопок у спливаючому вікні, а потім отримайте їх у головному вікні.