10

すべての 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ページから使用できるようにしたいイベント、プロパティ、メソッドなどを配置できるときに、ベースページを作成する最良の方法を知っている人はいますか?

4

5 に答える 5

29

現在のプロジェクトでこれを行った方法は次のとおりです。

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

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

次に、新しい Page を作成し、その 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" に戻して定義し、それらをすべての子孫で使用できます。

于 2008-09-02T22:58:19.127 に答える
4

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

于 2008-09-02T23:33:35.983 に答える
2

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

于 2008-09-02T19:12:02.460 に答える
2

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

于 2013-09-20T07:19:42.190 に答える
1

ちょっとした更新:私はそれをやろうとしましたが、うまくいきませんでした。彼は私が問題を解決するために変更したものです:

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"
/>

「使用」の代わりに「clr-namespace」を使用した場合、Intellisense は PigFinderPage を認識できましたが、コンパイラは認識できませんでした。

于 2015-09-10T06:48:07.210 に答える