无法在 Xamarin Forms 的派生 class 的 XAML 中访问基 class 的成员
Cannot access base class's members in the derived class's XAML in Xamarin Forms
我有一个 DialogView
class 派生自基数 class Dialog
又派生自 ContentView
,即。 DialogView : Dialog : ContentView
。我收到稍后提到的错误。
这是我的 XAML 代码 (DialogView.xaml)
<controls:DialogView xmlns="http://xamarin.com/schemas/2014/forms"
...
xmlns:controls="clr-namespace:MyProject.Views.Controls"
IsVisible="False"> <!--error: The property 'IsVisible' was not found in 'DialogView'-->
<ContentView.Content> <!--error: The attachable property 'Content' was not found in 'ContentView'
...
</ContentView.Content>
</controls:DialogView>
这是我的 C# 代码 (DialogView.xaml.cs)
public class Dialog : ContentView
{
// Some properties
}
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class DialogView : Dialog // error: Partial declarations of View must not specify different base classes
{
}
错误:
DialogView
class 是部分 class,其视图在 XAML 中定义。我想在 XAML 中访问它的 IsVisible
属性,但我无法访问它,我收到错误消息:The 属性 'IsVisible' 在 DialogView 中找不到。 IsVisible
是 VisualElement
的 属性,它在 ContentView
中可用,因为它在多个级别从 VisualElement
派生,那么为什么它在 [=15] 中不可用=] 因为 DialogView
来自 ContentView
.
我也不能在 DialogView
的 XAML 中使用 <ContentView.Content>
。我收到一个错误:在 'ContentView'.
中找不到可附加的 属性 'Content'
我也收到错误 View 的部分声明不能在我定义 public partial class DialogView : Dialog
的地方指定不同的基础 classes。
在 C# 中,基 classes 的 public 成员可在派生 class 中直接访问,因为派生 class 和基 class 共享一个 是一个关系。 XAML 不是这样吗?如何在 XAML.
中访问派生 class 中的基 class 成员
刚注意到一件事。你说 xaml 在 DialogView.xaml
中。如果那是正确的,那你就错了。
根元素的类型必须是 父元素 class。使用 x:Class
声明 class 本身:
<controls:Dialog xmlns...
x:Class="YourNamespace.DialogView">
替代解决方案
您可能把情况复杂化了。
为什么在DialogView.xaml.cs
中同时定义了Dialog
和DialogView
class?这是可能的,但几乎可以肯定不会做你想要的。
改为这样做:
向您的项目添加一个新的 ContentView
,命名为 Dialog
。这将添加两个文件,Dialog.xaml
和 Dialog.xaml.cs
。在这些文件中,将您想要存在的所有内容放入 all 您的 Dialog
.class 子 Dialog
.
中
向您的项目添加另一个新的 ContentView
,命名为 DialogView
。这将添加另外两个文件,DialogView.xaml
和 DialogView.xaml.cs
。在 xaml 中,将 <ContentView ...
更改为 <controls:Dialog ...
。在 cs 中,将 public partial DialogView : ContentView
更改为 public partial DialogView : Dialog
。因此,您的 DialogView 现在是一个对话框。构建解决方案(因此智能感知将正确地看到父级从 ContentView 更改为 Dialog。)现在根据需要添加到 xaml 和 cs。
注意:在未来的某个时候(或者可能在 2022 年预览版中已经实现),我希望 VS 可以直接创建一个 xaml-based 继承自自定义视图的控件 class。然后你就不必像我上面为 DialogView 做的那样拼凑,我首先创建一个 ContentView,然后重命名父级 class.
我有一个 DialogView
class 派生自基数 class Dialog
又派生自 ContentView
,即。 DialogView : Dialog : ContentView
。我收到稍后提到的错误。
这是我的 XAML 代码 (DialogView.xaml)
<controls:DialogView xmlns="http://xamarin.com/schemas/2014/forms"
...
xmlns:controls="clr-namespace:MyProject.Views.Controls"
IsVisible="False"> <!--error: The property 'IsVisible' was not found in 'DialogView'-->
<ContentView.Content> <!--error: The attachable property 'Content' was not found in 'ContentView'
...
</ContentView.Content>
</controls:DialogView>
这是我的 C# 代码 (DialogView.xaml.cs)
public class Dialog : ContentView
{
// Some properties
}
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class DialogView : Dialog // error: Partial declarations of View must not specify different base classes
{
}
错误:
DialogView
class 是部分 class,其视图在 XAML 中定义。我想在 XAML 中访问它的IsVisible
属性,但我无法访问它,我收到错误消息:The 属性 'IsVisible' 在 DialogView 中找不到。IsVisible
是VisualElement
的 属性,它在ContentView
中可用,因为它在多个级别从VisualElement
派生,那么为什么它在 [=15] 中不可用=] 因为DialogView
来自ContentView
.我也不能在
中找不到可附加的 属性 'Content'DialogView
的 XAML 中使用<ContentView.Content>
。我收到一个错误:在 'ContentView'.我也收到错误 View 的部分声明不能在我定义
public partial class DialogView : Dialog
的地方指定不同的基础 classes。
在 C# 中,基 classes 的 public 成员可在派生 class 中直接访问,因为派生 class 和基 class 共享一个 是一个关系。 XAML 不是这样吗?如何在 XAML.
中访问派生 class 中的基 class 成员刚注意到一件事。你说 xaml 在 DialogView.xaml
中。如果那是正确的,那你就错了。
根元素的类型必须是 父元素 class。使用 x:Class
声明 class 本身:
<controls:Dialog xmlns...
x:Class="YourNamespace.DialogView">
替代解决方案
您可能把情况复杂化了。
为什么在DialogView.xaml.cs
中同时定义了Dialog
和DialogView
class?这是可能的,但几乎可以肯定不会做你想要的。
改为这样做:
向您的项目添加一个新的
中ContentView
,命名为Dialog
。这将添加两个文件,Dialog.xaml
和Dialog.xaml.cs
。在这些文件中,将您想要存在的所有内容放入 all 您的Dialog
.class 子Dialog
.向您的项目添加另一个新的
ContentView
,命名为DialogView
。这将添加另外两个文件,DialogView.xaml
和DialogView.xaml.cs
。在 xaml 中,将<ContentView ...
更改为<controls:Dialog ...
。在 cs 中,将public partial DialogView : ContentView
更改为public partial DialogView : Dialog
。因此,您的 DialogView 现在是一个对话框。构建解决方案(因此智能感知将正确地看到父级从 ContentView 更改为 Dialog。)现在根据需要添加到 xaml 和 cs。
注意:在未来的某个时候(或者可能在 2022 年预览版中已经实现),我希望 VS 可以直接创建一个 xaml-based 继承自自定义视图的控件 class。然后你就不必像我上面为 DialogView 做的那样拼凑,我首先创建一个 ContentView,然后重命名父级 class.