我有一个DialogView
类,它派生自基类Dialog
,而基类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
类是一个分部类,在XAML中定义了视图。我想在XAML中访问该类的IsVisible
属性,但无法访问,出现错误:在DialogView中找不到属性“IsVisible”。IsVisible
是VisualElement
的属性,该属性在ContentView
中可用,因为它在多个级别上派生自VisualElement
,那么为什么它在DialogView
中不可用,因为DialogView
派生自ContentView
。- 我也不能在
DialogView
的XAML中使用<ContentView.Content>
。我收到一个错误:在“ContentView”中找不到可附加属性“Content”。 - 我还收到错误视图的部分声明不能指定不同的基类我定义
public partial class DialogView : Dialog
的地方。
在C#中,基类的公共成员可以在派生类中直接访问,因为派生类和基类共享is-a关系。在XAML中不是这样吗?在XAML中如何访问派生类中的基类成员?
1条答案
按热度按时间46scxncf1#
你说xaml在
DialogView.xaml
中,如果这是正确的,那么你犯了一个错误。根元素的类型必须是父类。使用
x:Class
声明类本身:替代解决方案
你可能把情况弄得过于复杂了。
为什么在
DialogView.xaml.cs
中定义**Dialog
和DialogView
类?这是可能的,但几乎可以肯定这不是您想要的。请改为执行以下操作:
1.添加一个新的
ContentView
到你的项目,命名为Dialog
。这将添加两个文件,Dialog.xaml
和Dialog.xaml.cs
。在这些文件中,把你想要存在的所有东西放在Dialog
的所有子类中。1.将另一个新的
ContentView
添加到您的项目,命名为DialogView
。这将添加另外两个文件,DialogView.xaml
和DialogView.xaml.cs
。在xaml中,将<ContentView ...
更改为<controls:Dialog ...
。在cs中,将public partial DialogView : ContentView
更改为public partial DialogView : Dialog
。因此,您的对话视图现在是一个对话框。2生成解决方案(这样intellisense将正确地看到从ContentView到Dialog的父更改。3)现在根据需要添加到xaml和cs。注意:在未来的某个时候(或者可能在2022预览版中已经实现),我希望VS能够直接创建一个基于xaml的控件,该控件继承自您的自定义视图类。这样您就不必像我在上面为DialogView所做的那样做一些杂七杂八的事情,我首先创建一个ContentView,然后重命名父类。