WPF でベース ページを作成するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/39843

  •  09-06-2019
  •  | 
  •  

質問

すべての WPF ページでルーティング イベントを登録する必要があると判断しました。含めるのではなく、

public static readonly RoutedEvent MyEvent= EventManager.RegisterRoutedEvent("MyEvent", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(BasePage));

すべてのページで、ベース ページ (BasePage という名前) を作成することにしました。上記のコード行をベース ページに配置し、他のページのいくつかを BasePage から派生するように変更しました。このエラーを回避できません:

エラー12 'cts.idocv7.basepage'は、XAMLを使用して定義されたため、XAMLファイルのルートではありません。1行目の位置22。C:\Work\iDoc7\CTS.iDocV7\UI\Quality\QualityControlQueuePage.xaml 1 22 CTS.iDocV7

任意の wpf ページから使用できるようにしたいイベント、プロパティ、メソッドなどを配置できる場合に、ベース ページを作成する最適な方法を知っている人はいますか?

役に立ちましたか?

解決

現在のプロジェクトでこれを行う方法を次に示します。

まず、次のようにクラスを定義しました(@Daren Thomas が言ったように、単なる古い C# クラスであり、関連付けられた XAML ファイルはありません)。(はい、これは実際のクラスです。質問しないのが最善です)。

public class PigFinderPage : Page
{
    /* add custom events and properties here */
}

次に、新しいページを作成し、その XAML 宣言を次のように変更します。

<my:PigFinderPage x:Class="Qaf.PigFM.WindowsClient.PenSearchPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:Qaf.PigFM.WindowsClient"
    />

そこで、「my」名前空間で PigFinderPage として宣言します。必要なページ全体のリソースは、同様の構文を使用して宣言する必要があります。

<my:PigFinderPage.Resources>
    <!-- your resources go here -->
</my:PigFinderPage.Resources>

最後に、この新しいページの分離コードに切り替え、次のように、ページから直接ではなくカスタム クラスから派生するようにクラス宣言を変更します。

public partial class EarmarkSearchPage : PigFinderPage

部分クラスとして保持することを忘れないでください。

これは私にとって非常に便利です。多数のカスタム プロパティとイベントを「PigFinderPage」に定義し、すべての子孫で使用できます。

他のヒント

また、こちらもご覧ください 付属イベント アプリ内のすべてのページにイベントを添付できるかどうかを確認してください。カスタム中間クラスよりも簡単かもしれません。

これについてはわかりませんが、エラーを見ると、C# (.cs) コードだけで基本クラスを定義しようとします。XAML で作成せず、WPF ページを拡張する標準の .cs ファイルだけを作成してください。クラス。

ここ チュートリアルでもあります!とてもシンプルで簡単です。

ちょっとしたアップデート:試してみただけですが、うまくいきませんでした。彼は問題を解決するために私が変更したものです:

1.多くのフォーラムでは、サブページは XAML を使用せずに単純な cs クラスから継承する必要があると書かれています。それは機能しますが。通常の XAML ページから問題なく継承します。

2.次のコードを置き換えました。

<my:PigFinderPage x:Class="Qaf.PigFM.WindowsClient.PenSearchPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:Qaf.PigFM.WindowsClient"
/>

<my:PigFinderPage x:Class="Qaf.PigFM.WindowsClient.PenSearchPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="using:Qaf.PigFM.WindowsClient"
/>

なぜなら、「using」の代わりに「clr-namespace」を使用した場合、Intellisense は PigFinderPage を認識できましたが、コンパイラは認識できなかったからです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top