这里的问题与生成的代码有关{x:Bind}
。
正如我们所知{x:Bind}
,使用生成的代码来实现它的好处。这些代码可以在obj文件夹中找到,名称类似于 (for C#) <view name>.g.cs。有关详细信息,请参阅{x:Bind} 标记 exstrong texttension。
如果你去.g.cs文件(我用过FlyoutHelper
,MainPage
所以在我这边,它是MainPage.g.cs),你会发现错误在Set_FlyoutDemoSample_FlyoutHelper_Parent
方法中。这个方法是在编译时生成的,FlyoutDemoSample
是我项目的命名空间。它的名字在你身边可能会有所不同。
如果我们去这个方法的定义,我们会发现这个方法中第一个参数的类型是FrameworkElement
.
public static void Set_FlyoutDemoSample_FlyoutHelper_Parent(global::Windows.UI.Xaml.FrameworkElement obj, global::Windows.UI.Xaml.FrameworkElement value, string targetNullValue)
{
if (value == null && targetNullValue != null)
{
value = (global::Windows.UI.Xaml.FrameworkElement) global::Windows.UI.Xaml.Markup.XamlBindingHelper.ConvertValue(typeof(global::Windows.UI.Xaml.FrameworkElement), targetNullValue);
}
global::FlyoutDemoSample.FlyoutHelper.SetParent(obj, value);
}
但是在使用的时候FlyoutHelper
,我们这里设置的参数是a Flyout
。
类不是派生自. 所以它会抛出一个错误:. 如果我们将第一个参数的类型更改为,则所有代码都可以正常工作。
Flyout
FrameworkElement
cannot convert from 'Windows.UI.Xaml.Controls.Flyout' to 'Windows.UI.Xaml.FrameworkElement'
DependencyObject
public static void Set_FlyoutDemoSample_FlyoutHelper_Parent(global::Windows.UI.Xaml.DependencyObject obj, global::Windows.UI.Xaml.FrameworkElement value, string targetNullValue)
{
if (value == null && targetNullValue != null)
{
value = (global::Windows.UI.Xaml.FrameworkElement) global::Windows.UI.Xaml.Markup.XamlBindingHelper.ConvertValue(typeof(global::Windows.UI.Xaml.FrameworkElement), targetNullValue);
}
global::FlyoutDemoSample.FlyoutHelper.SetParent(obj, value);
}
但是,这些代码是自动生成的,如果我们重新构建这个项目,我们仍然会得到同样的错误。我不确定这是否是 UWP 中的一个潜在错误,但我认为我们无法修复它。所以我建议你仍然Binding
在这种特殊情况下使用。