質問
すべての 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 を認識できましたが、コンパイラは認識できなかったからです。