在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 新手,如果我问了一个愚蠢的问题,很抱歉!
您需要设置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();