XAMLを使用して外観を定義するユーザーコントロール(Silverlight)がある場合、カスタマイズされたバージョンを作成するにはどうすればよいですか?
つまり、MyControl.xamlとMyControl.xaml.csがあります
「SpecializedControl」子クラスが必要な場合はどうすればよいですか?新しいコードファイルを作成してから、MyControlから継承すると仮定します。しかし、基本クラスの外観を変更したい場合はどうすればよいですか?
XAMLを使用して外観を定義するユーザーコントロール(Silverlight)がある場合、カスタマイズされたバージョンを作成するにはどうすればよいですか?
つまり、MyControl.xamlとMyControl.xaml.csがあります
「SpecializedControl」子クラスが必要な場合はどうすればよいですか?新しいコードファイルを作成してから、MyControlから継承すると仮定します。しかし、基本クラスの外観を変更したい場合はどうすればよいですか?
Silverlight ではなく WPF について話していると思ってこれを書きましたが、これが役立つのに十分な重複があるかもしれないので、とにかく投稿します。
「基本クラスの外観を変更する」が「新しいテンプレートを提供する」ことを意味する場合、必要なのはおそらく UserControl ではなく CustomControl です。
これを実現する最善の方法は、Button や ListBox などの他の Microsoft コントロールによって設定された例に従うことです。
これは、単純に UserControl から派生させるよりもはるかに手間がかかりますが、組み込みコントロールの場合と同様に、コントロールを完全に再テンプレート化したい場合は、この方法が適しています。
一方、背景を変更したり、コマンドをユーザー アクションに関連付けたりするなど、ある程度限定されたカスタマイズを提供することだけが必要な場合は、DependencyProperties を公開することをお勧めします。コントロールのスタイル、またはコントロールのインスタンス自体に設定できます。
継承されたコントロールの外観をカスタマイズしたいとおっしゃった場合、プロセスは非常に似ています。新しいテンプレートを使用して、新しいコントロールのデフォルト スタイルを追加するだけです。さらにイベント ハンドラを追加する必要がある場合は、必ず base.OnApplyTemplate() を呼び出してください。
Mihnea のリンクが説明しているように、最も簡単な解決策は、XAML に名前空間を追加することです。
public class MyBase : UserControl
{
}
public class FirstUserControl : MyBase
{
...
}
<local:MyBase
x:Class="FirstUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="YourAssembly" ...>
<!-- Sticking with UserControl instead of local:MyBase makes this clearer -->
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
..
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
..Your XAML
</local:MyBase>
わかりませんが、単純なオブジェクトだけで物事を行うのが好きです。MicrosoftStuffThatAlmostWorks ではなく SimpleThingsLikeInheritance を使用して外観と動作をカスタマイズできるように、XAML で設計されたコントロールを継承階層の外に滑り込ませる簡単な方法を説明する記事を次に示します。
http://gen5.info/q/2009/02/10/subverting-xaml-how-to-inherit-from-silverlight-user-controls/
上記のリンクで説明されているように、ラッパーを使用してこれを解決できます。しかし、戦略パターンを使用してこの問題を解決することもできます。
この記事では、これら 2 つの方法をどのように実装するかを説明します。 http://www.lab101.be/2008/07/silverlight-usercontrol-inheritance/