あなたが必要としない、いかなるこれらの他の空想の回答。以下はすべて持っていない単純化した例であるMargin
、Height
、Width
XAMLで設定されたプロパティを、これは基本的なレベルで行わ取得する方法を示すために十分なはずです。
XAML
ビルドしWindow
、通常あなたのようなページを考え、それに自分のフィールドを追加し、言うLabel
とTextBox
内部コントロールをStackPanel
:
<StackPanel Orientation="Horizontal">
<Label Name="lblUser" Content="User Name:" />
<TextBox Name="txtUser" />
</StackPanel>
次に、Button
送信の標準(「OK」または「送信」)と、必要に応じて「キャンセル」ボタンを作成します。
<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
イベントハンドラーを含めて、次のように1つの変更を加えましょう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
、戻り値なし、何もありません。ウィンドウを開き、ポップアップウィンドウのボタンイベントで値を保存し、その後メインウィンドウ関数で値を取得するだけです。