WinUI3中如何检测ContentDialog的CloseButton是否被点击?
WinUI3中检测ContentDialog关闭按钮点击及输入内容验证
WinUI3 的 ContentDialog 没有直接的 IsClicked() 方法,但可以通过 ShowAsync() 的返回值判断用户点击了哪个按钮,进而结合输入框内容做验证。
核心逻辑说明
ContentDialog.ShowAsync() 返回 ContentDialogResult 枚举,不同按钮点击对应不同枚举值:
- 点击 PrimaryButton(设置
PrimaryButtonText)返回ContentDialogResult.Primary - 点击 SecondaryButton(设置
SecondaryButtonText)返回ContentDialogResult.Secondary - 点击 CloseButton(设置
CloseButtonText或右上角关闭叉号)返回ContentDialogResult.None
修改后的代码示例
你当前代码里把"Select"设为CloseButtonText,若要检测这个按钮的点击并验证输入内容,可修改如下:
var inputTextBox = new TextBox { AcceptsReturn = true, Height = 32, Width = 300, Text = string.Empty, TextWrapping = TextWrapping.Wrap, }; if (Controller.CheckVersion() == 1) { ContentDialog dialog = new ContentDialog { XamlRoot = this.XamlRoot, Style = Application.Current.Resources["DefaultContentDialogStyle"] as Style, Title = "Please write something!", Content = inputTextBox, CloseButtonText = "Select", }; // 接收ShowAsync的返回值 var result = await dialog.ShowAsync(); // 判断是否点击了CloseButton if (result == ContentDialogResult.None) { // 检查TextBox输入内容 if (string.IsNullOrWhiteSpace(inputTextBox.Text)) { // 输入为空时的处理逻辑,比如提示用户 var tipDialog = new ContentDialog { XamlRoot = this.XamlRoot, Title = "提示", Content = "请输入内容!", PrimaryButtonText = "确定" }; await tipDialog.ShowAsync(); } else { // 输入有效时的处理逻辑 // TODO: 处理用户输入的内容 } } }
额外提示
如果"Select"是你希望用户确认输入的按钮,更合理的做法是将它设为 PrimaryButton(即设置 PrimaryButtonText = "Select"),此时点击它会返回 ContentDialogResult.Primary,语义更符合确认操作场景,代码判断逻辑只需改为 if (result == ContentDialogResult.Primary) 即可。
内容的提问来源于stack exchange,提问作者ravenaxd
相关产品推荐
相关产品推荐

