質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

547閲覧

.NET MAUI ContentPageを継承して作ったページを更に継承したい

micchi

総合スコア36

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

1グッド

0クリップ

投稿2023/12/01 15:06

実現したいこと

  • ContentPageを継承して作ったページを基本ページとして、その基本ページを継承したい
  • 継承元か、継承先をどのように定義したらいいのでしょうか

前提

.NET MAUI で従来のC#のフォームの継承のようにPageを継承しようとしたらそのような継承は不可能だというエラーになりました

発生している問題・エラーメッセージ

エラー CS0263 'XXXPage' の partial 宣言では、異なる基底クラスを指定してはいけません

該当のソースコード

継承元にしたいページ

xaml

1<?xml version="1.0" encoding="utf-8" ?> 2<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" 3 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 4 x:Class="MyApp.ToolbarBasePage" 5 Title="ToolbarBasePage"> 6 7 <ContentPage.ToolbarItems> 8 <ToolbarItem Clicked="Apply_Clicked" x:Name="Apply" /> 9 </ContentPage.ToolbarItems> 10 11</ContentPage>

csharp

1public partial class ToolbarBasePage : ContentPage 2{ 3 public ToolbarBasePage() 4 { 5 InitializeComponent(); 6 } 7 8 /// この関数を継承先で使いたい 9 protected void ValueChaned() 10 { 11 Apply.Text = "APPLY"; 12 Apply.IsEnabled = true; 13 Apply.IconImageSource = ImageSource.FromFile(ConstData.IMAGE_DONE); 14 } 15}

ToolbarBasePageを継承したいContentPage

xml

1<?xml version="1.0" encoding="utf-8" ?> 2<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" 3 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 4 x:Class="MyApp.XXX" > 5 <!-- ここのToolbarItemsを継承元のを使いたい --> 6 <!--<ContentPage.ToolbarItems> 7 <ToolbarItem Clicked="TabApply_Clicked" x:Name="tabApply" /> 8 </ContentPage.ToolbarItems>--> 9 10 <VerticalStackLayout x:Name="mainLayout"> 11 </VerticalStackLayout> 12</ContentPage>

csharp

1public partial class XXX: ToolbarBasePage // ここでエラー発生 2{ 3InitializeComponent(); 4}

試したこと

双方のpartialを取ってみたり、継承元をpublicからprotected等にしてみましたが変わりませんでした

補足情報(FW/ツールのバージョンなど)

Visual Studio 2022/17.8
.net 8

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

xml:XXX.xaml

1<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" 2 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 3 x:Class="MyApp.XXX" >

WPFやUWPでも同じだと思いますが、XAMLから生成されたコードと継承元クラスが食い違っています(class XXXの上で右クリックして、定義ジャンプで飛べます XXX.xaml.sg.cs )

↓となっていなければなりません(2か所のlocalは別にlでもなんでもいいですが、同じでなければなりません)

xml:XXX.xaml

1<local:ToolbarBasePage 2 x:Class="MyApp.XXX" 3 xmlns="http://schemas.microsoft.com/dotnet/2021/maui" 4 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 5 xmlns:local="clr-namespace:MyApp">

xmlns:local="using:MyApp"でもいいようです。
XAML namespaces - .NET MAUI | Microsoft Learn

逆にここは指定しなくても動きます。

cs:XXX.xaml.cs

1public partial class XXX //: ToolbarBasePage 2{ 3 public XXX() 4 { 5 InitializeComponent(); 6 } 7}

投稿2023/12/01 16:12

編集2023/12/02 13:15
TN8001

総合スコア9276

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

micchi

2023/12/02 12:40

ありがとうございます。 継承の仕方を間違っていたってことですね。ページの方に継承を記述すればいいのですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問