WinUI3開發筆記(Ⅱ)
- WinUI3中的”
MessageBox.Show()
“
# (一,如何實現)
“開發WinUI3,第一個不適就是消息彈窗!”
WinUI中沒有C#.NetFrameWork的MessageBox,但怎麼實現彈窗呢?官方給出了方法
官方給出了示例代碼,可在應用商店搜索”Xaml Controls Gallery”或前往官網-開發人員中心-查看示例可以下載示例(包括源代碼)
點擊查看xaml代碼
<Page
x:Class="AppUIBasics.ControlPages.ContentDialogContent"
xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="//schemas.microsoft.com/winfx/2006/xaml">
<StackPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<!-- Content body -->
<TextBlock Text="Lorem ipsum dolor sit amet, adipisicing elit." TextWrapping="Wrap" />
<CheckBox Content="Upload your content to the cloud."/>
</StackPanel>
</Page>
點擊查看C#代碼
private async void ShowDialog_Click(object sender, RoutedEventArgs e)
{
ContentDialog dialog = new ContentDialog();
dialog.Title = "Save your work?";
dialog.PrimaryButtonText = "Save";
dialog.SecondaryButtonText = "Don't Save";
dialog.CloseButtonText = "Cancel";
dialog.DefaultButton = ContentDialogButton.Primary;
dialog.Content = new ContentDialogContent();
var result = await dialog.ShowAsync();
}
C#代碼是放置在事件中的,比如按鈕點擊時彈窗,則放入這一段,其中倒數第二條dialog.Content = new ContentDialogContent();
則是連接的另一個xaml頁面作為內容,去掉也可以的
效果如下:
當然,也可以放置其他內容,比如顏色選擇,圖片剪輯等,此處就不過多展示(因為顏色選擇器本人還未弄懂)
(二,報錯問題)
當我興高采烈放到一個”Test”項目中嘗試的時候,出錯啦!
為什麼出錯呢?直接運行會直接導致閃退,使用調試的時候,看到了以下錯誤:
System.ArgumentException:「Value does not fall within the expected range.」
也就是值不在預期範圍內,超範圍了唄!
後來經過幾個小時的不斷嘗試,我發現…
來自//blog.csdn.net/flyingdream123/article/details/122523347的博主給出了問題所在
也就是在var result = await dialog.ShowAsync();
的前面需設置XamlRoot
點擊查看代碼
if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 8))
{
dialog.XamlRoot = this.Content.XamlRoot;
}
折騰了好久的問題終於解決了!官方竟然沒給出這一段…[無語]😶
(三,獲取點擊的按鈕)
如何判斷用戶點擊了哪個按鈕呢?
var result = await dialog.ShowAsync();
則是獲取了按鈕值,判斷方法如下:
點擊查看代碼
if (result == ContentDialogResult.Primary)
{
//第一按鈕"
}
else if (result == ContentDialogResult.Secondary)
{
//第二按鈕"
}
else
{
//取消按鈕
}
注意!前面的C#代碼中設置按鈕的片段中,取消按鈕是必須的,其餘按鈕是可選的