Проблема связана с созданным кодом для {x:Bind}
.
Как известно, {x:Bind}
использует сгенерированный код для достижения своих преимуществ. И эти коды можно найти в OBJ папки с такими именами, как (на C#) < вид имени > .g.cs. Для получения дополнительной информации см. {x:Bind} markup 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
параметр мы устанавливаем здесь является 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
в этом специальном сценарии.
X: Привязка не принимает ElementName. Поэтому вы не можете использовать в этом случае – Archana
Я уверен, что это так. https://msdn.microsoft.com/en-us/windows/uwp/xaml-platform/x-bind-markup-extension (10-й абзац в разделе «Путь свойств»). – Alamakanambra
Да, да. Извините, я не понял. Я знал, что опции ElementName не существует. Но не знал, что вы можете указать его как путь. – Archana