2

派生したユーザーコントロールからコントロールを派生させたいのですが、xamlがそれを解決するのに問題があります。ただし、最初は単純なシナリオです。MyControls.dllライブラリがあります。その中で、私は次のような.csファイルの「UserControl」に基づくコントロールを持っています

public class MyUserControl : UserControl { ... }

問題ない。次に、これから派生した2番目の(VISUAL)コントロールを作成します...そこで、この同じMyControls.dllライブラリでそれぞれNewFromMyUserControl.xaml.csおよびNewFromMyUserControl.csという新しいUserControlを実行します。

public partial class NewFromMyUserControl : MyUserControl { ... }

さて、Xamlでは...

<mylib:MyUserControl x:Class="MyControls.SubFolder1.NewFromMyUserControl"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        xmlns:mylib ="clr-namespace:MyControls" (blah blah) />
</mylib:MyUserControl>

これは問題なく動作します。また、簡単にするために、「MyUserControl」または「NewFromMyUserControl」クラスの実際のコードはありません...派生した実装をテストするだけです。

今、問題。別のライブラリ「MyBaselineControls.dll」があります。このライブラリには、派生したい実際のUserControlがあります...など

public class MyBaselineUserControl : UserControl { ... }

そして今、私は「MyUserControl」をこのような他のものから派生するように変更したいと思います

from
    public class MyUserControl : UserControl { ... }
to
    using MyBaselineControls;
    public class MyUserControl : MyBaselineUserControl { ... }

この1行が変更されるとすぐに、コンパイラは次のように失敗します...

エラー2'MyControls.MyUserControl'は、XAMLを使用して定義されているため、XAMLファイルのルートにすることはできません。1行目位置19....何とか何とか

別のライブラリから派生したものから派生する問題はありますか?

ありがとう

4

1 に答える 1

3

XAML定義を持つユーザーコントロールから派生することはできません。基本クラスでXAMLを定義しない限り、問題はありません。エラーに関する具体的な情報は、ここにあります。

これを回避する1つの方法は、から派生し(または派生していないControl別のクラス)、ベースおよび派生コントロールのコントロールテンプレートを定義することです。このページでは、またはから継承するときに何ができるか、およびどちらから派生するかを決定するときに考慮すべきことを正確に説明します。ControlUserControlControlUserControl


編集

両方ともXAMLを定義していないと言っているので、うまくいくはずMyBaselineUserControlです。MyUserControl自分で試してみましたが、問題ありませんでした。

ベースのUserControlが実際にXAMLなしで作成されていることを確認することをお勧めします。つまり、「追加->ユーザーコントロール」ではなく「追加->クラス」で作成されている必要があります。

于 2012-10-19T18:09:30.197 に答える