2011-08-03 6 views
1

コントロールの外観をオーバーライドするためにWPFカスタムコントロールを作成することができます。&アイコンボタンのような感じです。WPF:プログラムで定義コントロールテンプレート

public class MyButton : Button { 

    static MyButton() 
    { 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(MyButton), new FrameworkPropertyMetadata(typeof(MyButton))); 
    } 
... 
} 

しかし、私はその方法には問題があると思います。それは私がカスタムのCotrol 'MyButton'を配布するときに何らかの問題を引き起こします。 MyButtonは外部リソースに依存するため、WPF Style MyButton。だから私は2つのファイルを配布する必要があります:MyButton.csとMyButton.WPF。

ですから、私はどのようにしてConotrolテンプレートをプログラムで定義できますか?

(原因のうち、問題を解決するための別の方法は、WPFユーザーコントロールを行っているが、私のポイントはそれではありません。。)

注:私はこの問題について、いくつかのリソースを発見しました。それはインラインXAMLスクリプトでした。しかし、私にとっては、XAMLスクリプトはオプションではありません。私はWPFで学んでいるので、私はWPFそのものを知りたいです。

答えて

2

あなたがコードを配布していない、あなたはクラスとgeneric.xaml

そのように他のデザイナー/開発できる「オーバーライド」テンプレートが含まれているDLLを配布し、あなたのテンプレートは、安全fall-としてとどまりますバック。コード内のテンプレートの定義

EDIT

は、(維持するために、ハード、ハードデバッグに多くのコード、)何の楽しみではありませんが、それは行うことができます。

var template = new ControlTemplate(typeof(MyControl)); 

EDIT2

もう1つのハックは、長い文字列でテンプレートを指定し、XAMLパーサーを使用してテンプレートをロードすることです。

+0

ありがとうございました。しかし問題はまだ残っている。カスタムコントロールをアセンブリではなくソースコードで配布する場合、XAMLと.csの2つのファイルが必要です。 そして、率直に言って、私の関心は、プログラムではなく、配布で定義コントロールテンプレートです。ありがとうございます。 ありがとうございます。 – mjk6026

+0

次に、私の答えの編集部分にある部分を使用してください。もう1つのハックは、長い文字列でテンプレートを指定し、XAMLパーサーを使用してテンプレートをロードすることです。 –

+0

@ mjk6026、BTW:xamlもWPFです。同じことを書くもう一つの方法。ありがとうございます。 –

関連する問題