1

我想在我的 UWP 应用程序中实例化一个 ContentDialog,它在我的 XAML 中定义如下:

<Page
    . . .
    <Grid x:Name="grd">
        . . .
        <ContentDialog x:Name="cntDlgLoadMap"
            Title="This is an example"
            PrimaryButtonText="Ok"
            CloseButtonText="Cancel"
            DefaultButton="Primary">
        </ContentDialog>
    </Grid>
</Page>

试图让一个最小的例子运行,我打算试试这个:

private void btnLoadMap_Click(object sender, RoutedEventArgs e)
{
    cntDlgLoadMap.ShowAsync();
}

...但是得到了这个设计时错误消息:

在此处输入图像描述

所以我把代码改成这个,在方法/事件处理程序中添加“async”,在调用中添加“await”以显示内容对话框:

private async void btnLoadMap_Click(object sender, RoutedEventArgs e)
{
    await cntDlgLoadMap.ShowAsync();
}

因此,应用程序编译并运行,但是当我选择“LoadMaps”按钮时,我得到了这个:

在此处输入图像描述

然后,在按 F5 继续后,我得到:

~app_g_i_cs_afterHittingF5

我的代码或 XAML 有什么问题或缺少什么?

更新

根据 Roy Li 的要求,这里是加载按钮的 XAML:

<Button x:Name="btnLoadMap" Content="Load Map" Margin="20,16,50,0" VerticalAlignment="Top" Click="btnLoadMap_Click" />
    
4

2 回答 2

1

我可以使用以下代码使其工作(几乎/或多或少)。

这是相关的 XAML:

<Button x:Name="btnCre8NewMap" Content="Create New Map" ToolTipService.ToolTip="Create a new map" Margin="140,16,50,0" VerticalAlignment="Top" Click="btnCre8NewMap_Click"/>
. . .
<ContentDialog x:Name="cntDlgCre8Map"
Title="Create a New Map"
PrimaryButtonText="Save"
CloseButtonText="Cancel"
DefaultButton="Primary">
    <StackPanel>
    <TextBlock Text="Map Name: "/>
    <TextBox x:Name="txtbxMapName"
        Width="300" HorizontalAlignment="Left"/>
    <TextBlock Text="Default Zoom Level: "/>
    <ComboBox x:Name="cmbxCre8MapZoomLevels"
        Width="100" HorizontalAlignment="Left"/>
    <TextBlock Text="Map Notes: "/>
    <TextBox x:Name="txtbxMapNotes"
        Width="300" Height="300" HorizontalAlignment="Left"/>
    </StackPanel>
</ContentDialog>

...这是代码隐藏中的按钮单击事件:

private async void btnCre8NewMap_Click(object sender, RoutedEventArgs e)
{
    try
    {
        string mapName = string.Empty;
        string mapNotes = string.Empty;
        int defaultZoomLevel = 1;
        ClearLocations();
        // Popul8 the cmbx
        for (int i = 1; i < 20; i++)
        {
            cmbxCre8MapZoomLevels.Items.Add(i.ToString());
        }
        ContentDialogResult result = await cntDlgCre8Map.ShowAsync();

        if (result == ContentDialogResult.Primary)
        {    
            mapName = txtbxMapName.Text;
            mapNotes = txtbxMapNotes.Text;
            defaultZoomLevel = cmbxCre8MapZoomLevels.SelectedIndex + 1;
            InsertMapRecord(mapName, mapNotes, preferredZoomLevel);
        }
        // else do nothing (don't save)
    }
    catch (Exception ex)
    {
        MessageDialog exceptionMsgDlg = new MessageDialog(ex.Message, "btnCre8NewMap_Click");
        await exceptionMsgDlg.ShowAsync();
    }
}

这是我单击 btnCre8NewMap 时看到的内容:

在此处输入图像描述

于 2020-12-05T06:22:19.407 回答
1

在堆栈上而不是在 Xaml 页面上创建您的 ContentDialog。您可以创建一个新的 ContentDialog 类或使用 xaml 创建一个 UserControl 类。请参阅此处的示例。

    private async void btnLoadMap_Click(object sender, 
    RoutedEventArgs e)
    {
        var content = new MyUserControl();
        var dialog = new ContentDialog
        {
           Content = content
        };

        await dialog.ShowAsync();
    }
于 2020-12-02T00:24:07.937 回答