在WinUI 3中,当我调用ContentDialog时,它告诉我当前元素已经绑定到XamlRoot,但我只在一个地方调用它

问题描述 投票:0回答:1

在WinUI 3中,当我调用ContentDialog时,它告诉我当前元素已经绑定到XamlRoot,但我只在一个地方调用它。

具体图片:

详情

通话方式:

                <TextBox x:Name="NumberInput" 
                     Margin="10,-10,10,25"
                     Width="60" 
                     Height="60" 
                     Header=" " 
                     Text="{Binding Limit}"
                     TextChanged="UpdateLimit" />

功能细节:

        private async void UpdateLimit(object sender, TextChangedEventArgs e)
        {
            if (int.TryParse(NumberInput.Text, out int maxNumber))
            {
                viewModel.Limit = maxNumber;
            }
            else
            {
                ContentDialog Dialog = new ContentDialog
                {
                    Title = "1",
                    Content = "1",
                    CloseButtonText = "1"
                };

                ContentDialogResult result = await Dialog.ShowAsync();
            }
        }

我尝试使用 ctrl+f 查找 ContentDialog 关键字,以确认这是我编写的唯一位置。 而且我通过new bing的查询了解到这个问题通常不会只出现在一个窗口上,所以我不明白。

我是 winui 新手,如果我问了一个愚蠢的问题,很抱歉!

winui-3 winui
1个回答
0
投票

您需要设置XamlRoot

如果您在

Page
中调用此函数,则使用页面的
XamlRoot
:

ContentDialog Dialog = new ContentDialog
{
    XamlRoot = this.XamlRoot,
    Title = "1",
    Content = "1",
    CloseButtonText = "1"
};

ContentDialogResult result = await Dialog.ShowAsync();

如果您在

Window
中调用此函数,则使用根元素的
XamlRoot
:

<Window ...>
    <Grid x:Name="RootGrid">
        ...
    </Grid>
</Window>
ContentDialog Dialog = new ContentDialog
{
    XamlRoot = this.RootGrid.XamlRoot,
    Title = "1",
    Content = "1",
    CloseButtonText = "1"
};

ContentDialogResult result = await Dialog.ShowAsync();
© www.soinside.com 2019 - 2024. All rights reserved.