Вам не потрібна БІЛЬКА з цих інших вигадливих відповідей. Нижче наведено спрощений приклад , який не має все 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
, немає повернутих значень, нічого. Просто відкрийте вікно, збережіть свої значення з подіями кнопок у спливаючому вікні, а потім отримайте їх у головному вікні.