2010-12-27 10 views
8

私はWPFの適切なアプリケーションについての講義を依頼していると思いますが、私はウィットの終わりからチャンスを取るつもりです。これは主にWPFのテンプレートとスタイルを完全に採用していることによる煩わしさの結果であると思いますので、私はそのような講義を聞いてうれしいです。WPFのカスタムContentControl

私はある種のオーディオエディタ/イベントオーケストレーターを書いています。私はかなり満足しているトラックエディタを持っています。しかし、私はそれをカスタムコントロールから大部分を構築しました(私は知っています、これはおそらくWPFの罪です)。そのテーマに合わせて、私はトラックの標準ヘッダーを作りたいと思いますが、個々のトラックの "タイプ"がそのヘッダーの内容を定義できるようにしたいと思います。私は、エッジ上に一種の「グリップ」を定義し、その後、実装者がその物質を「埋める」ことを許可するコントロールがうまくいくと考えました。しかし、スタイルを使用せずにWPFでこれを行う方法はわかりません。スタイルを使用しても、これを理解したいと思います。

これはおそらく、単純なContentControlコントロール(ボタンなど)の典型的な実装を必要とし、AvalonDockを見つけることができないということになります(これはAvalonDockを使用します。 )。私の頭では、XAMLは、このようなものになります。

<ContentControl x:Class="TestArea.CustomContentControl2" 
     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" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="100"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <TextBlock Text="Hello"/> 
    <ContentPresenter Grid.Column="1"/> 
</Grid> 

をしかし、もちろん、それは動作しません。私は舞台裏で過負荷でトリックをすることで同じことをやることができるとはかなり確信していますが、このようなことができればいいと思います。私は本当に私の後ろに私のひどい、手続き的な方法を入れて、あなたが話すこれらのスタイルを使用する必要がありますか?もしそうなら、誰かが少なくとも、そのボタンがフレームワーク内でどのように見えるのか教えてもらえますか?

答えて

4

はあなたが望むものを達成するためにContentControlに由来の完全な例である:それはあなたの例の場合と同様Creating Customized UserControls (Deriving from ContentControl) in WPF 4

ピートさんのContentPresenterは同じことをやっています。

+0

これは、私が言及したスタイルのアプローチです。 OK、ローマ/レドモンドにいるとき... – Jeff

+0

スタイルやテンプレートで "豚全体"に行く必要はありません。これは終わりのための手段にすぎません。インテリアを任意のコンテンツにすることです。上記の内容をUserControlの代わりにControlTemplateに入れて、最終結果を探しています。宗教的な転換は必要ありません! –

+0

リンクが無効です。 – Kilazur

1

スタイルを使用すると、コントロールの表示を使用してコントロールの機能を分離することができます。 Buttonなどです。

最初のコントロールとしては何も機能しないと考えてください。あらかじめ定義されたイベント、プロパティなどを含むシンプルなクラス。コントロールがビジュアルツリーの一部になるという仕事を引き受けると、視覚的なアイデンティティが必要になります。それは以前は必要なかった。しかし今はそれがあります。既定のスタイルを定義することで、そのコントロールが、ビジュアルツリー内に存在しないため、以前は必要でなかったビジュアル表現を持つことができます。

スタイルを無視すると、HTMLを使用するときにCSSを無視するようなものになります。ここで

関連する問題