問題タブ [resourcedictionary]
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.
silverlight - プログラムで ResourceDictionary 項目にアクセスする
「MySilverlightControls」と呼ばれる Silverlight コントロール アセンブリがあります。そのアセンブリのいくつかのフォルダーの下に、サード パーティ ベンダーのグリッド列を拡張するクラスがあります。これを「MyImageColumn.cs」と呼びましょう。
という名前のリソース ディクショナリも作成しましたGeneric.xaml
。これはThemes
、アセンブリのフォルダにあります。そのリソース ディクショナリで、 MyImageColumnTemplateという ControlTemplate を定義しました。
私の質問は: MyImageColumn から、このコントロール テンプレートをプログラムで参照/ロードして、列のプロパティに割り当てるにはどうすればよいですか? 次のような構文を使用することを期待しています。
しかし、これは常に null を返します。アセンブリを Reflector に読み込むと、Generic.xaml
ファイルがそこにあり、リソースの名前が で、MySilverlightControls.g.resources
その中のパスが であることがわかりますthemes/generic.xaml
。
このリソース ディクショナリ内の個々の項目に正確にアクセスするにはどうすればよいですか?
wpf - XAML - MergedDictionaries が XmlParseException をスローし、「アイテムは既に追加されています」。なんで?
次の非常に再現しやすい問題があります。別のファイルのリソースを使用する xaml アプリケーションを作成しています。次のように、MergedDictionaries タグを作成して、ローカル リソースとグローバル リソースをマージします。
この小さなコードを実行すると、クラッシュします。
MergedDictionaries タグを削除すると、コードは期待どおりに実行されます。
マージされたリソースを使用すると、例外がスローされる理由がわかりません。もちろん、今のところ修正は簡単です (リソースを下位レベルに移動します)。これが「通常の」動作であるかどうかを知っておくとよいでしょう...
wpf - ResourceDictionary要素またはUserControl?
ロゴを描画するためのXAMLがいくつかあり、これを他のさまざまなXAMLファイルで再利用したいと考えています(UIがなく、コードも必要ありません)。ロゴXAMLのトップレベルはCanvas
アイテムです。
他のXAMLファイルでロゴを使用するには、このロゴをの要素として定義するか、 ?ResourceDictionary
を作成するのが最適です。UserControl
これは簡単に思えUserControl
ますが、XAMLファイルをXamlReaderでロードしたいので、XAML内で指定できるようにリソースを使用することをお勧めします。になどのアイテムを保存することは可能のようですがCanvas
、ResourceDictionary
それらを参照する方法がわかりません。
たとえば、次のようにロゴをResourceDictionary
要素として定義できます。
しかし、これを他のXAMLファイルでどのように使用できLogo
ますか?リソースについて間違った考えを持っている可能性がありますか?
wpf - 別のアセンブリからの WPF での UserControl のスタイル設定
アプリケーション アセンブリで定義された WPF ユーザー コントロールがあります。別の (スキンまたはテーマ) アセンブリのスタイルに基づいてユーザー コントロールのスタイルを設定しようとしています。すべてのスタイルを含む resourcedictionary を含むテーマ/スキン アセンブリでアプリケーション アセンブリを参照したくありません。これを行う方法はありますか?例えば
WPFApplication アセンブリ
MyUserControl.xaml <- WPF ユーザー コントロール
テーマの組み立て
MyStyles.xaml <- WPF リソース ディクショナリ
使えると思います
MyStyles.xaml リソース辞書で、次を使用します。
WPFApplication アセンブリで MyUserControl.xaml を使用する任意のウィンドウで
ただし、MyStyles.xaml resourcedictionary のカスタム ユーザー コントロールをターゲットにすることをお勧めします。
これは可能ですか??
c# - WPF-C#:この要素は現在どのコンテキストにも関連付けられていません
ElementHostControl内のWinFormsコントロールで使用するWPFUserControlがあります。次に、Windowsフォームが開いたままの状態でWPFウィンドウを起動します。次に、WPFウィンドウを閉じて、子要素をWPF UserControlに追加しようとすると、次の例外を除いて、(子要素の) "InitializeComponent()"でクラッシュします。
「System.Configuration.dllでタイプ'System.Configuration.ConfigurationErrorsException'の最初のチャンスの例外が発生しました。追加情報:この要素は現在、どのコンテキストにも関連付けられていません。」
なぜそれが起こるのかはわかりましたが、問題を解決する方法がわかりません。このコードを省略した場合:
その後、すべてが大丈夫です。ただし、ResourceDictionary(および定義されたスタイルとテンプレート)がWPFウィンドウとコントロール全体で使用できないため、これが必要です。これは私がここで見つけた
両方の長所を組み合わせる方法はありますか?アプリケーションがクラッシュするのを防ぎながら、ResourceDictionaryを保持しますか?
wpf - ResourceDictionary 内から祖先へのバインド
UserControl
その 内から のプロパティにバインドするにはどうすればよいResourceDictionary
ですか? リソースで宣言するオブジェクトが、含まれDataContext
ているものと同じになるようにします。UserControl
実行時にエラーが発生します:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='UserControl', AncestorLevel='1''. BindingExpression:Path=DataContext; DataItem=null; target element is 'SomeClass' (Name=''); target property is 'DataContext' (type 'Object')
wpf - WPF: アセンブリ間でリソースを共有する
以前、マークアップ拡張機能を使用してアセンブリ間でリソースを共有することに関する質問を投稿しました。このソリューションはうまく機能しますが、すべての共有リソースをリソース ディクショナリに配置する必要があります。私のはかなり大きくなってきているので、マージされた辞書を使用して整理しようと思いました。Themes/generic.xaml
ComponentResourceKey
generic.xaml
generic.xaml
私はこれまで運がありませんでした。以前の投稿のデモを使用していくつかのテストを実行しましたが、マージされたディクショナリにリソースを移動するとすぐにComponentResourceKey
失敗し、マージされたディクショナリのソース ファイルが見つからないと不平を言いました。
他の誰かがこれを機能させましたか?どのように?ご協力いただきありがとうございます。
wpf - (WPF)sys:Doubleの値をResourceDictionaryからSystemFonts.MessageFontSizeに設定するにはどうすればよいですか?
シナリオ:
WPFアプリケーションに3つの標準フォントサイズを使用したい:BigFontSize
、、、。これらはdouble値であり、リソースディクショナリで次のように定義されます(適切に定義されている場合)。NormalFontSize
SmallFontSize
sys
これはうまく機能します。しかし、私は通常のサイズとしてランダムに14を選択しました。私が欲しいのは、のシステム定義のフォントサイズを取得することですNormalFontSize
。(それが行われた場合、ここで説明されているコンバーターを使用してBigFontSize
、SmallFontSize
相対を取得できますNormalFontSize
)
ヒント :
ドキュメントから、デフォルトのフォントサイズが静的プロパティ(double)に格納されていることがわかりましたSystemFonts.MessageFontSize
。しかし、その値をリソースディクショナリに取得するにはどうすればよいですか?(私は知っているBinding
かDynamicResource
、適用できません。しかし、これは静的な値なので、どのように適用できますStaticResource
かx:Static
?)
私が試してみました
と
どちらも(期待どおりに)機能していないようです。エラーが発生しますCannot add content to object of type 'System.Double'.
ノート:
- App()などのコードからこれを実行したくありません。(ResourceDictionaryのコードビハインドを使用することは可能ですか?)
これを一般化されたスタイルでカプセル化したくないのは、他のスタイルを(を使用して
BasedOn
)派生させることができるためです。リソースディクショナリがいくつかあり、で使用DynamicResource
するBasedOn
ことはできません。つまり、使用できません。なぜなら、他のResourceDictionaryにスタイルがある場合、たとえば
HeaderTextBlockStyle
、使用する必要があるため、BasedOn={DynamicResource BigFont}
これは不可能です(私は思います)
どんな助けでも大歓迎です。
ありがとうございました。
タグ:WPF SystemFonts.MessageFontSize ResourceDictionary FontSize BasedOn DynamicResource
silverlight - ResourceDictionary を使用しようとしていますが、その中のスタイルが見つかりません
MyClassLibrary という Silverlight クラス ライブラリがあります。
その中に、MyControl というユーザー コントロールがあります。
コントロール内で、ユーザー リソースを定義します。
コントロールは、次のようなスタイルを使用します。
これはすべて完全に機能し、ComboBox は適切なスタイルを提供するので、スタイルが正しく記述されていることがわかります。
私が本当に望んでいるのは、スタイルをリソース ディクショナリに配置して、このアセンブリ内の複数の異なるコントロールで使用できるようにすることです。そこで、SAME アセンブリ内にリソース ディクショナリを作成します。これを ResourceDictionary.xaml と呼びます。
スタイル定義をユーザー コントロールからリソース ディクショナリに移動します。
したがって、リソース ディクショナリは次のようになります。
コントロールのユーザー リソースは次のようになります。
また、コントロールは以前とまったく同じ方法でスタイルを使用します。
「Source」属性をNonExistentFile.xamlに変更しようとしたため、ResourceDictionary.xamlファイルが見つかっていることがわかりましたが、ファイルが見つからないと不平を言いました。ResourceDictionary.xaml ではそのような不満は出ないので、見つけていると思います。
ただし、アプリを実行すると、「名前/キー ComboBoxStyle のリソースが見つかりません」というエラーが表示されます。
私は何を間違っていますか?これはとても単純なようで、うまくいきません。
あなたが私に与えることができる助けを前もって感謝します。
wpf - 別のライブラリの別のアセンブリで定義されたWPFスタイルキーを参照する方法
2つのライブラリと1つのアプリケーションアセンブリプロジェクトレイアウトがあり、一方のライブラリで定義されているもう一方のライブラリのキーでスタイルを参照するにはどうすればよいのでしょうか。
私のソリューションレイアウト:
- WpfControls.dll -WPFベースのNumericUpDownコントロール、その他の基本的なコントロール、および再利用可能にしたいいくつかのスタイルなど、一般的な再利用可能なコントロールを保持します。例のために、ここでの私のスタイルキーがMyButtonStyleとして定義されているとしましょう。
- SpecializedControls.dll-カスタム複合コントロールやWPFのUserControlsなど、アプリケーションに特化したコントロールを保持します。ここで、WpfControls.dllアセンブリで定義されているMyButtonStyleスタイルを参照します。
- Application.exe-このアセンブリは、SpecializedControls.dllアセンブリで定義されたコントロールを使用します。
単純な単一のコントロールライブラリとアプリケーションアセンブリを使用してこれを行う方法を説明する例を見てきましたが、私の場合は2つのアセンブリと1つのアプリケーションがあります。つまり、私の場合、MergeDictionariesの概念を使用できる2番目のコントロールライブラリにApp.xamlがありません。MergedDictionaries参照を各コントロールXAMLファイルに直接配置して、WpfControls.dllアセンブリで定義されたすべてのGeneric.xamlをマージできると確信していますが、これにより、スタイルがさまざまな場所に冗長にマージされると思います。私のSpecializedControlsアセンブリでは、これは最善の解決策とは思えません。さらに悪いことに、これらの辞書もApplication.exeにマージされる可能性がありますが、これにより、実行時にアプリケーションが肥大化し始めますか?
プログラムとリソースのオーバーヘッドを最小限に抑えて、このようなスタイルを共有するための推奨または最善のアプローチを誰かが明確にできますか。
更新:もう少しテストしたところ、同じアセンブリ内であっても、Generic.xaml内で定義されているリソースをそのキーで参照するのに問題があるようです。リソースキーがどのように機能するかを理解している方法にまったく問題がある可能性があるため、ComponentResourceKeyを調べるだけでなく、もう少し調査する必要があります。誰かが何かヒントや提案があれば助けてください。