我有一個DialogView派生自基類的類,該基類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
{
}
錯誤:
DialogViewclass 是具有在 XAML 中定義的視圖的部分類。我想IsVisible在 XAML 中訪問它的屬性,但我無法訪問它,我收到錯誤:在 DialogView 中找不到屬性“IsVisible”。IsVisible是一個屬性,VisualElement它在多個級別ContentView派生時可用,那么VisualElement為什么它在派生自時不可用。DialogViewDialogViewContentView我也不能使用
<ContentView.Content>insideDialogView的 XAML。我收到一個錯誤:在 'ContentView' 中找不到可附加屬性 'Content'。我也收到錯誤View 的部分宣告不能在我定義的地方指定不同的基類
public partial class DialogView : Dialog。
在 C# 中,基類的公共成員可以在派生類中直接訪問,因為派生類和基類共享is-a關系。這不是 XAML 中的情況嗎?如何在 XAML 中訪問派生類中的基類成員。
uj5u.com熱心網友回復:
剛剛注意到一件事。你說 xaml 在DialogView.xaml. 如果這是正確的,那么你就犯了一個錯誤。
根元素的型別必須是父類。用于x:Class宣告類本身:
<controls:Dialog xmlns...
x:Class="YourNamespace.DialogView">
替代解決方案
您可能使情況過于復雜。
為什么要在中同時 Dialog定義和DialogView類DialogView.xaml.cs?這是可能的,但幾乎可以肯定不會做你想做的事。
而是這樣做:
ContentView向您的專案添加一個名為Dialog. 這將添加兩個檔案Dialog.xaml和Dialog.xaml.cs. 在這些檔案中,將您想要存在的所有內容放入Dialog.向您的專案添加另一個新
ContentView名稱,名為DialogView. 這將添加另外兩個檔案DialogView.xaml和DialogView.xaml.cs. 在 xaml 中,更改<ContentView ...為<controls:Dialog .... 在 cs 中,更改public partial DialogView : ContentView為public partial DialogView : Dialog. 因此,您的 DialogView 現在是一個 Dialog。構建解決方案(因此智能感知將正確地看到從 ContentView 到 Dialog 的父級更改。)現在根據需要添加到 xaml 和 cs。
注意:在未來的某個時間(或者可能在 2022 年預覽版中已經有可能),我希望 VS 可以直接創建一個從自定義視圖類繼承的基于 xaml 的控制元件。然后你就不必像上面對 DialogView 那樣做一個雜亂無章的事情,我首先創建一個 ContentView,然后重命名父類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/461940.html
