WPF에서 모달 대화 상자를 만드는 방법
Xaml 창이 있는 경우 자녀 창으로 열고 부모 창이 닫힐 때까지 부모 창이 대기하도록 하려면 어떻게 해야 합니까?
ShowDialog 메서드를 사용하여 창을 표시해 보았습니까?
대화창의 [Owner]속성을 메인창으로 설정하는 것을 잊지 마십시오.이렇게 하면 Alt+Tabbing 등의 이상한 동작을 피할 수 있습니다.
이러한 답변의 대부분은 단순하며, 누군가가 WPF를 시작하고 있다면 단순히 누군가에게 "사용하기"를 말하는 것보다 더 복잡하기 때문에 모든 "내부 및 외부"를 알지 못할 수 있습니다..ShowDialog()!." 단, 이 방법은 (이 방법이 아님).Show()를 사용하여 기본 창 사용을 차단하고 모달창이 닫힐 때까지 코드가 계속되지 않도록 합니다.
먼저 2개의 WPF 창이 필요합니다.(한쪽이 다른쪽을 호출합니다.)
첫 번째 창부터 Main Window.xaml이라고 불리며 코드 배후에 다음이 있다고 가정합니다.
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
그런 다음 XAML에 버튼을 추가합니다.
<Button Name="btnOpenModal" Click="btnOpenModal_Click" Content="Open Modal" />
오른쪽 버튼을 클릭합니다.Click루틴에서 "정의로 이동"을 선택합니다.MainWindow.xaml.cs 에서 작성됩니다.
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
}
이 기능에서는 페이지 클래스를 사용하여 다른 페이지를 지정해야 합니다.다른 페이지에 "Modal Window"라는 이름을 붙였다고 칩시다.이렇게 하면 페이지 클래스가 되고 인스턴스화(호출)할 수 있습니다.
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
}
모달 대화 상자에서 필요한 값을 설정했다고 가정합니다.텍스트 상자 및 버튼을 만듭니다.ModalWindowXAML:
<StackPanel Orientation="Horizontal">
<TextBox Name="txtSomeBox" />
<Button Name="btnSaveData" Click="btnSaveData_Click" Content="Save" />
</StackPanel>
그런 다음 이벤트 핸들러를 만듭니다(다른 이벤트 핸들러).Clickevent)를 사용하여 텍스트 상자 값을 퍼블릭 스태틱 변수에 저장합니다.ModalWindow및 콜this.Close().
public partial class ModalWindow : Window
{
public static string myValue = String.Empty;
public ModalWindow()
{
InitializeComponent();
}
private void btnSaveData_Click(object sender, RoutedEventArgs e)
{
myValue = txtSomeBox.Text;
this.Close();
}
}
그럼 다음에.ShowDialog()스테이트먼트에서는, 그 값을 취득해 사용할 수 있습니다.
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
string valueFromModalTextBox = ModalWindow.myValue;
}
Window.Show는 창을 표시하고 실행을 계속합니다. 이것은 비차단 통화입니다.
Window.ShowDialog는 발신 스레드(kinda)를 차단하고 대화상자를 표시합니다.또한 부모/소유 창과의 상호 작용도 차단합니다.대화상자가 해제되면(어떤 이유로든) ShowDialog는 발신자에게 돌아가 DialogResult에 액세스할 수 있습니다(필요한 경우).
[1] 디스패처 프레임을 WPF 디스패처 위로 밀어냄으로써 디스패처 펌핑이 유지됩니다.이로 인해 메시지 펌프가 계속 펌핑됩니다.
Window 오브젝트 myWindow, myWindow가 지정되었습니다.Show()가 모델리스로 열리고 my Window가 열립니다.ShowDialog()가 모듈식으로 열립니다.다만, 후자도 막지 않았던 것으로 기억합니다.
언급URL : https://stackoverflow.com/questions/499294/how-to-make-modal-dialog-in-wpf
'programing' 카테고리의 다른 글
| Python에서 상대적인 Import는 어떻게 해야 하나요? (0) | 2023.04.10 |
|---|---|
| UIImage 문자열과 Base64 문자열 간 변환 (0) | 2023.04.10 |
| 롤리팝의 최신 Chrome 버전에서 헤더 바와 주소 바의 색상을 변경하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
| wpf: 명령에 의해 버튼이 비활성화되었을 때 툴팁을 표시하는 방법 (0) | 2023.04.10 |
| bash 쉘에서 하나의 문자열을 여러 변수로 분할하려면 어떻게 해야 합니까? (0) | 2023.04.10 |