問題タブ [controltemplate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
9767 参照

wpf - WPFカスタムコントロール:画像へのTemplateBinding

とを使用して、WPFカスタムコントロールを作成してButtonImageますTextImagePathコントロールに2つの依存関係プロパティを追加しましTextた。コントロールテンプレート(Themes \ Generic.xaml内)は、画像とテキストを水平方向に配置する単純なスタックパネルです。

Textプロパティは正常に動作します。しかし、何らかの理由で、依存関係プロパティを使用TemplateBindingしてパスを取得すると、テストプロジェクトのサンプル画像が表示されません。カスタムコントロールのを一時的に画像へのパスにImagePath置き換えて画像をテストしました。その場合、画像が表示されます。TemplateBinding

この分野の経験が豊富な人が、コントロールが期待どおりに機能しない理由を調べて教えてくれることを願っています。ご協力いただきありがとうございます。

私のVS2008ソリューションには、CustomControlDemoという1つのプロジェクトが含まれています。プロジェクトには、カスタムコントロールTaskButton.csと、コントロールのテストに使用するメインウィンドウWindow1.xamlが含まれています。私のテスト画像calendar.pngは、プロジェクトのルートレベルのResourcesフォルダーにあり、Generic.xamlは、同じくプロジェクトのルートレベルのThemesフォルダーにあります。

これが私のカスタムコントロールのコードです(TaskButton.csから):

そして、これが(Generic.xamlからの)コントロールテンプレートです:

最後に、コントロールのテストに使用しているWindow1マークアップを次に示します。

画像パスが機能しない理由はありますか?再度、感謝します。

0 投票する
1 に答える
7460 参照

wpf - WPF のテンプレートに基づいて、実行時に異なるコンテンツを持つ TabItems を作成する

私は WPF を使用してアプリケーションを作成しています。その一部には、カスタムの社内デバイスを構成するために使用されるさまざまなファイルをユーザーが管理することが含まれます。同じ TabControl 内のタブでさまざまな種類の構成を操作できるようにする必要があります。つまり、TabItems のコンテンツを動的に生成する必要があります。ControlTemplates でこれを行いたいのですが、まだ機能するテンプレートを取得できていません。Window リソースで定義された「pendantConfigurationTabItemTemplate」という ControlTemplate があり、次のコードを使用してテンプレート (アクセスする必要がある名前付きアイテムを含む) を TabItems に適用し、それらを親 TabControl に追加します。

コードビハインド:

ただし、プログラムを実行するたびに、タブコントロールにタブが追加されず、代わりにタブコントロールが(一見)テンプレートのコンテンツに置き換えられるかカバーされます。誰かがこれで私を助けてくれますか?

事実上、私がやりたいことは、WPF テンプレートを TabItem ファクトリとして使用することです

0 投票する
2 に答える
930 参照

wpf - MVVM/コマンドと ControlTemplates

現在、MVVM/Commands と ControlTemplates をいじっています。私がやろうとしていることは非常に簡単です。たとえば、ユーザーがそれぞれに対してアクションをトリガーできる人のリストが必要です。しかし、ボタンでリストから削除したいなどの理由で、イベント/コマンドハンドラーは人物オブジェクトではなく実行する必要があります。

これまでに行ったことは、PersonVM のリストを公開する VM を作成し、それぞれが個人オブジェクトを保持することでした。次に、個人を表示する ItemsControl を含む controltemplate を使用して CustomControl を作成しました。

すべてのデータがきれいに表示され、まったく問題ありません。

次に、ユーザーがリストから人を削除できるようにする部分を追加しようとしました。そこで、データテンプレートにボタンを追加しました。それでも問題ありません。

次のステップは、ボタンによってトリガーされるコマンドを公開することでした。

最初のアプローチは、Josh Smith の RelayCommand を使用することでした。そのため、そのうちの 1 つを PersonViewModel に追加し、ボタンにバインドしました。動作しますが、問題は、(コマンドの実行後に) 親 vm が処理しなければならないイベントを発生させる必要があることです。ますます多くのコマンドでコードが乱雑に見えるので、それは良くありません。

そのため、RoutedCommand を使用するようにすべてを作り直し、コントロール階層の上位レベルに CommandBinding を追加しようとしました。しかし、ControlTemplate ではビューモデルでメソッドを呼び出すことができないため、これは不可能です。

だから、その問題に対する正しいアプローチは何だろうと思っていますか?どういうわけか、私は間違った方向に進んでいると信じていますが、どこにあるのかわかりません。

ティア・マーティン

0 投票する
2 に答える
2765 参照

wpf - WPF: ControlTemplate で {TemplateBinding Margin} を使用すべきではないのはなぜですか? Margin は要素のコンテナーのみを対象としていますか?

次のように、ボタン用に独自の ControlTemplate を作成しました。

さて、ボタンにマージンを設定すると、次のようになります。

ボタンには実際には 2 倍の Margin - 40 があります。実際、コントロールは Margin を使用してはならず、Margin プロパティは配置フェーズ中にボタンの祖先によってのみ読み取られると想定しました。その後、WPF のデフォルト スタイルを調べたところ、いずれも Margin を使用していないことがわかりました。

これは正しい結論ですか (Margin はコンテナーによって正しく配置されるためだけに制御されているということです)? つまり、スタイルで {TemplateBinding Margin} を使用するたびに、代わりに 2 つのマージンが得られるのでしょうか。そして、私のコントロールが使用すべきではない同様のプロパティのリストはありますか (それらは「周囲の世界」のみを対象としているため)?

これについて説明している MSDN ページを教えてください。ありがとうございました!

編集:

http://msdn.microsoft.com/en-us/library/ms745058.aspxhttp://msdn.microsoft.com/en-us/library/ms751709.aspxで答えを見つけるべきだと思いますが、私はしませんMargin プロパティを使用するのは決してコントロールではなく、それを評価してレイアウトに影響を与えるのは常に祖先または wpf システムであると明示的に述べたとは思わない...

0 投票する
1 に答える
21816 参照

silverlight - プログラムで ResourceDictionary 項目にアクセスする

「MySilverlightControls」と呼ばれる Silverlight コントロール アセンブリがあります。そのアセンブリのいくつかのフォルダーの下に、サード パーティ ベンダーのグリッド列を拡張するクラスがあります。これを「MyImageColumn.cs」と呼びましょう。

という名前のリソース ディクショナリも作成しましたGeneric.xaml。これはThemes、アセンブリのフォルダにあります。そのリソース ディクショナリで、 MyImageColumnTemplateという ControlTemplate を定義しました。

私の質問は: MyImageColumn から、このコントロール テンプレートをプログラムで参照/ロードして、列のプロパティに割り当てるにはどうすればよいですか? 次のような構文を使用することを期待しています。

しかし、これは常に null を返します。アセンブリを Reflector に読み込むと、Generic.xamlファイルがそこにあり、リソースの名前が で、MySilverlightControls.g.resourcesその中のパスが であることがわかりますthemes/generic.xaml

このリソース ディクショナリ内の個々の項目に正確にアクセスするにはどうすればよいですか?

0 投票する
2 に答える
17230 参照

wpf - コントロールテンプレートを継承する方法

CheckBoxいくつかの特別な操作の制御をオーバーライドしたWPFプロジェクトに取り組んでいます。それは正しく機能しています。

私の問題はControlTemplate、テーマ(codeplexのshinyred.xaml)から適用されたものが、オーバーライドされたコントロールに適用されないことです。CheckBox ControlTemplate新しいコントロールで使用するためにを継承する方法はありますか?

私が見つけることができるすべてのサンプルは、のスタイルを継承することに焦点を当てていますが、CheckBoxについては何もありませんControlTemplate

0 投票する
1 に答える
1946 参照

silverlight - Silverlight 3 で実行時に ControlTemplate パーツを置き換えるにはどうすればよいですか?

XAML のリソース セクションで定義されたテンプレートを使用するカスタム コントロールを作成しており、実行時にコントロールのインスタンスの 1 つまたは複数のテンプレート パーツを置き換えたいと考えています。

たとえば、コントロールのテンプレートに「ActivePart」という名前のパーツがある場合、コントロールのインスタンスにある ActivePart の FrameworkElement を新しい FrameworkElement に置き換えるにはどうすればよいですか?

Control.Template プロパティが書き込み可能であることは認識していますが、テンプレート全体を新しく作成するよりも、そのテンプレートの特定の部分を置き換える方法を見つけたいと思いますが、適切な名前付き部分を置き換えることで既存のテンプレートを編集するソリューションは受け入れられる。

私は C# を使用しており、FrameworkElement を使用して実行時にこれを行う必要があるため、XAML ベースのソリューションや提案は探していません。

PS GetTemplateChild() がコントロール インスタンス内の名前付きテンプレート パーツの FrameworkElement を返すことは知っていますが、それがそのパーツを新しい FrameworkElement に置き換えるのにどのように役立つかわかりません。

0 投票する
2 に答える
4271 参照

wpf - セッタープロパティをオーバーライドするWPF

XAMLでラベルにスタイルを使用しています:

私が見ている問題は、「reatreatText」のFontSizeプロパティがセッター値30からオーバーライドされないことです。これは正常にビルドされますが、最終表示にはサイズ30の「reatreatText」があります。この値がオーバーライドされないのはなぜですか。

前もって感謝します。

0 投票する
1 に答える
2823 参照

wpf - コントロールテンプレートのボタンを使用し、コードビハインドなしでwpfリストボックスの選択をクリアします

ユーザーがクリックできるを含むStyleWPFのを作成し、選択をクリアしたいと考えています。これを任意の に適用できるように、コードビハインドを使用したくありません。私はs とs を使用してみましたが、最初にしか機能せず、セットを以前の選択に戻して停止するため、問題があることが判明しました。ユーザー コントロールを使用できることはわかっていますが、.ListBoxButtonControlTemplateListBoxStyleListBoxEventTriggerStoryboardStoryboardStyle

0 投票する
1 に答える
3465 参照

c# - ControlTemplate.Triggers での TemplatedParent バインディング

テキストが空の場合、ControlTemplate のトリガーを使用してカスタム コントロールの背景をビジュアル ブラシに設定しようとしています。関連するコードを次に示します。

ただし、テキストが空の場合、ビジュアル ブラシは適用されません。ただし、ビジュアル ブラシをコードで作成し、それを依存関係プロパティとして公開すると、次のコード機能します。

ただし、XAML でブラシを定義したいと思います。2 番目のバインディングは正しく機能するのに、最初のバインディングは機能しないのはなぜですか?