1

通常のUserControlは、XAMLでは次のようになります。

<UserControl x:Class="mynamespace.foo" ...namespaces...>
<!-- content -->
</UserControl>

次のように、自分のトップレベルオブジェクトを定義できるようにしたいと思います。

<MyControl x:Class="mynamespace.mycontrol" ...namespaces...>
<!-- content -->
</UserControl>

MyControlがUserControl自体から派生している場合。

もちろん、コンパイラは「MyControl」が見つからないと文句を言います。これを回避する方法はありますか?

4

3 に答える 3

3

ルートタグは基本クラスです。これが、デフォルトのWindow1のルートがWindowである理由です。メニューオプションの[追加]>[UserContol...]を使用すると、実際にはUserContolのサブクラスが作成されます。

いくつかの共通要素があり、コントロールの基本クラスが必要な場合は、基本クラスをルートタグとして使用できます。xamlで定義されたビジュアルツリーを持つクラスからクラスを派生させることはできませんが、基本クラスはUserConrtolから派生させることができます。

まず、基本クラスを定義します。

public class MyControlBase : UserControl
{
    // ...
}

次に、特定の子クラスを作成します。

(自動的に作成されたUserControl1から始めて、そこから変更できます)

public partial class MyControl1 : MyControlBase
{
    public MyControl1()
    {
        InitializeComponent();
    }
}

次に、Xaml側を次のように変更します。

<MyNamespace:MyControlBase
    x:Class="MyNamespace.MyControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:MyNamespace="clr-namespace:MyNamespace">

これは、UserControl以外の組み込みのコントロールから派生したカスタムコントロールを作成するための優れた方法です。通常、可能な場合は基本的なUserConrtolを使用し、必要な場合にのみカスタムコントロールを作成することをお勧めします。

幸運を、

于 2010-03-20T20:08:49.037 に答える
0

XAMLで名前空間を定義してから、コントロール名をタグとして使用します。

<Window ...
    xmlns:my="..." />

    <my:mycontrol ... />

</Window>
于 2010-03-20T19:00:41.610 に答える
0

いいえ。XAMLはMyControlが視覚的に何であるかを宣言しています。これは、コードビハインドがMyControlの動作を定義しているのと同じです。MyControlの観点からMyControlのビジュアルを定義することは、実際には意味がありません。これは、コードビハインドで、MyControlからMyControlを派生させることと同等ですが、これは明らかに行いません。

さらに、WPFでは、あるUserControlクラスを別のクラスから派生させることはできません。たとえば、BobsControlがUserControlの場合、<local:BobsControl x:Class="MyNamespace.MyControl... />どちらも記述できません。これは、UserControlsの視覚的な外観(コンテンツ)がXAMLに組み込まれており、派生クラスのコンテンツが基本クラスのコンテンツを置き換える必要があるため、視覚的な継承は一般的に役に立たないと思います。

ただし、派生元の最上位要素がカスタムコントロールである場合は、これを実行できます。カスタムコントロールは見栄えがしません(XAMLでは定義されていません)。したがって、独自のトップレベル要素をカスタムコントロールとして作成し、そこから「ユーザー」コントロールを派生させることができます。(このルートをたどる場合は、ContentControlからカスタムコントロールを派生させるか、ContentPropertyAttributeを適用して、最上位の要素に他のXAMLを簡単に含めることができるようにすることをお勧めします。)

于 2010-03-20T19:31:34.897 に答える