당신은 필요하지 않습니다 어떤 이 다른 멋진 답변의. 다음은 모든이없는 단순한 예는 Margin
, Height
, Width
XAML에 속성을 설정하지만,이 기본적인 수준에서 수행 얻는 방법을 보여 충분합니다.
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
, 반환 값이 없습니다. 창을 열고 팝업 창에서 버튼 이벤트와 함께 값을 저장 한 다음 나중에 기본 창 기능에서 검색하면됩니다.