XAML WinUI 3中的自定义内容对话框

qjp7pelc  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(141)

在我的程序中,我有一个带有多个选项卡的TabControl,在每个选项卡中可以有一个用户可以随时打开的对话框。我使用对话框来允许用户向数据库中输入内容。我希望复制原始ContentDialog的外观和功能,但不限于一次只能打开一个。
这个想法将是沿着一个面板的线条,浮动在标签控件项的其余部分(但不是整个应用程序窗口),并拒绝与它下面的标签控件中的任何东西(但不是整个程序)进行交互,直到关闭。
根据Microsoft的说法,ContentDialog的当前限制:
每个线程一次只能打开一个ContentDialog。尝试打开两个ContentDialog将引发异常,即使它们尝试在单独的应用程序窗口中打开。
https://learn.microsoft.com/en-us/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.contentdialog?view=windows-app-sdk-1.4
最好的办法是什么?

yptwkmov

yptwkmov1#

一种不用ContentDialog就可以实现的方法是在标签内容的顶部显示一个层,并在该层的顶部显示您想在ContentDialog上显示的内容。
举例来说:

<TabView>
    <TabView.TabItems>
        <TabViewItem
            VerticalContentAlignment="Stretch"
            Header="Tab #1">
            <Grid>
                <Grid
                    x:Name="ContentPanel"
                    VerticalAlignment="Stretch">
                    <Button
                        Click="ShowMessageButton_Click"
                        Content="Show message" />
                </Grid>

                <StackPanel
                    x:Name="MessageBasePanel"
                    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
                    Opacity="0.5"
                    Visibility="Collapsed" />
                <StackPanel
                    x:Name="MessagePanel"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    Visibility="Collapsed">
                    <TextBlock Text="Some message." />
                    <Button
                        Click="CloseMessageButton_Click"
                        Content="Close" />
                </StackPanel>
            </Grid>

        </TabViewItem>
        <TabViewItem Header="PowerShell">
            <TabViewItem.IconSource>
                <BitmapIconSource
                    ShowAsMonochrome="False"
                    UriSource="/Assets/TabViewIcons/powershell.png" />
            </TabViewItem.IconSource>
        </TabViewItem>
        <TabViewItem Header="Windows Subsystem for Linux">
            <TabViewItem.IconSource>
                <BitmapIconSource
                    ShowAsMonochrome="False"
                    UriSource="/Assets/TabViewIcons/linux.png" />
            </TabViewItem.IconSource>
        </TabViewItem>
    </TabView.TabItems>
</TabView>

个字符

相关问题