問題タブ [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.
wpf - WPF ResourceDictionary の分割
約 7 つのユーザー コントロールで構成された WPF アプリケーションがあり、それぞれにさまざまなコントロール (テキスト ボックス、コンボ ボックス、ラジオ ボタンなど) があります。
アプリ全体に、CodePlex の WPF テーマから取得した一連のコントロール スタイルを適用しましたが、これらのスタイルを適用してから、アプリの速度が少し低下していることに気付きました。すべてのスタイルを含む ResourceDictionary のコード サイズは 300 KB 近くあります。
スタイルを複数のリソース ディクショナリに分割し、使用されていない場合でも、すべてのコントロール スタイルではなく、各ユーザー コントロールが必要とするスタイルのみをマージすることで得られるメリットはありますか。
WPF はどのようにスタイルをメモリにロードしますか? 必要な場合、または起動時に ResourceDictionary 全体がメモリに読み込まれますか?
wpf - xamlリソースを使用しますが、参照ごとに一意のコンテンツを保持します
私はいくつかのリストボックスを持っており、グループエクスパンダーを作成するためにグループスタイルを設定しました。すべてのリストボックスで同じスタイル情報を使用してすべてのエキスパンダーを作成したいのですが、スタイルを使用するたびにヘッダーのコンテンツをカスタムに変更できるようにしたいと思います。
から取り出すことができますが、それでも内容を編集する方法はありますか
現在、私はこれに似た構文を使用しています:
どんな助けでも大歓迎です!
読んでくれてありがとう
wpf - XAML のシステム型をリソースとして使用する
XAML で浮動小数点値を直接指定し、それをいくつかの UI ピースのリソースとして使用すると非常に便利な状況に遭遇しました。いろいろと調べてみると、適切なアセンブリ (mscorlib) を XAML に含める方法について、かなりの量の情報が見つかりました。
残念ながら、これを行おうとすると例外が発生します。状況を再現する次の XAML を次に示します。
これをコンパイルして実行しようとすると、「'120' はプロパティ 'Width' の有効な値ではありません」という XamlParseException がスローされます。
しかし、「Width」プロパティはdouble なので、定義された StaticResource を使用して設定できないのはなぜですか? 誰もこれを行う方法を知っていますか?
wpf - Generic.xaml でマージされた辞書に絶対 uri が必要なのはなぜですか?
ファイルを検討する | 以下を含む WPF アプリケーションの新しいプロジェクト:
- CustomControl1 という名前の新しいカスタム コントロール
- Dictionary1 と Dictionary2 という名前の 2 つの新しいリソース ディクショナリ
生成されたスタイルを Generic.xaml から取り出し、Dictionary2 に移動します。次に、次のように Dictionary2 を Dictionary1 にマージし、Dictionary1 を Generic にマージします。
次に、CustomControl1 のインスタンスを MainWindow のグリッドに追加します。(この部分は問題を再現するために必要です。プロジェクトは常に正常にコンパイルされます。実行時にのみ問題が表示され、辞書を参照する必要があります。)
Dictionary1.xaml では、同じフォルダー内の別の dict にマージしているため、単純な Source="Dictionary2.xaml" が機能します。しかし、Generic.xaml では絶対 URI を使用する必要があります。上記を pack://application なしで Source="Dictionary1.xaml" に変更すると、MainWindow を構築しようとすると、IOException "リソース 'dictionary1.xaml' が見つかりません" が原因で XamlParseException が発生します。
私の質問: 相対 URI 解決に関する generic.xaml の特別な点とその理由を教えてください。
silverlight - XamlReader.Load が Silverlight 4 の添付プロパティを認識できないのはなぜですか?
Silverlight 4 アプリケーションで実行時にテーマをプログラムで適用する方法を見つけようとしています。これは、リソース ディクショナリを XAML から読み込んで、それをアプリケーションのマージされたディクショナリとマージするのと同じくらい簡単なはずだと考えました。これまでの私のコードは次のとおりです。
残念ながら、XamlParseException
への呼び出し中に a が発生しますXamlReader.Load
:
添付可能なプロパティ 'Foo' がタイプ 'Bar' で見つかりませんでした。
これは適切にアタッチされ、適切に宣言されており、XAML の名前空間宣言は必要な名前空間を正しく参照しています。添付プロパティ XAML は、App.xaml マークアップを介して宣言的にマージされた辞書に読み込まれると、問題なく機能します。
これは、実行時にロードしようとしている XAML の省略されたコピーです。
「静的に」読み込まれたときに正常に動作しているのに、実行時に XAML を読み込むときに添付プロパティへの参照が機能しないのはなぜですか?
silverlight - 異なるアセンブリおよび XAP に配置された外部静的リソースへのアクセス
私のプリズム ベースの Silverlight アプリケーションは、複数の xap に分割されて、最初のダウンロード サイズを減らし、マルチテナント アプリケーションをサポートします。
ただし、外部アセンブリで定義されたリソース ディクショナリにアクセスできません (つまり、リソース .xaml ファイルは、別の xap に準拠する/コピーされるアセンブリの一部です)。
助言がありますか ?外部リソース ファイルにアクセスするための標準構文が機能しないため
silverlight - Silverlight4での明示的なスタイルによるランタイムテーマの切り替え
アプリケーションに動的テーマ切り替えを追加するように要求されましたが、これを行う方法がわかりません。
現在の状況は次のとおりです。アプリケーションには、明示的な(暗黙的ではない)スタイルのマージされたリソースディクショナリがあります。StaticResource
アプリケーションのビューは、マークアップ拡張機能を介してこれらのスタイルを参照します。暗黙的なスタイルを使用しない理由は、一般的なタイプのコントロールを複数回検索するためです。たとえば、ある場所のボタンは別の場所のボタンとは異なって見えます。
したがって、私たちがやりたいのは、これらの名前付きスタイルを新しい名前付きスタイルのセットに置き換えるテーマを作成することです。
アプローチ1
最初の試みは、テーマごとにリソース辞書を作成することでした。一般的な辞書からスタイルの1つを削除し、それらを各テーマ辞書に配置して、次のように各コピーに異なる外観を与えました。
次に、XAMLからリソースディクショナリの1つを動的にロードし、それをアプリケーションのマージされたディクショナリに挿入するコードを追加しました。
これはある程度機能しました。起動時に「テーマ」を読み込んだ場合、そのテーマのスタイルが表示されていました。しかし、うまくいかなかったのは、起動後に他のテーマに切り替えようとしたことでした。マージされたディクショナリに他のテーマテーマディクショナリを追加しても、UIは変更されませんでした。また、古いテーマ辞書をクリアして新しいテーマ辞書を追加することもしませんでした。これらのいずれも実行せずに、ルートビジュアルを削除して再度追加しました。
アプローチ2
その後、SilverlightToolkitパターンのテーマを使用してみました。これは、明示的なスタイルではなく暗黙的なスタイルを切り替えることを目的としているため、機能しなかったと思います。テーマから派生したクラスを作成し、そのリソースディクショナリURIを設定して、そのテーマをルートビジュアルに追加しました。ただし、メインのUIクラスを作成したときに、UIによって参照される明示的なスタイルが見つからなかったため、実行時例外が発生しました。 ContentControl
そこで、テーマリソースディクショナリの1つをアプリケーションのマージされたディクショナリにロードしてみました。これにより、メインUIクラスを作成し、Style
オブジェクト内に配置することができました。ただし、Style
リソースディクショナリ内の明示的なスタイルは、アプリケーションのマージされたディクショナリ内で定義されたスタイルをオーバーライドできませんでした。したがって、何も変化していないように見えました。
現在のアプローチ
そこで今、私は3番目のアプローチを検討しています。これには、次のようなものを使用した添付プロパティが含まれますTheming.Style="StyleName"
。次に、アプリケーションの他の場所で、テーマ名とスタイル名のオーバーライドの間の関連付けが維持されます。テーマが変更されるたびに、テーマに適したスタイルが適用されます。
ジレンマ
すでにホイールが存在する場合は、ホイールを再発明したくありません。明示的なスタイルを含むテーマを切り替えることができるSilverlightに組み込まれているものはすでにありますか?私がやりたいことをさせてくれるサードパーティのライブラリはありますか?
.net - XAML が解析される前に静的 ResourceDictionary を UserControls に追加する
WinForms アプリケーションで (ElementHost を使用して) いくつかの場所 (=> このコントロールの複数のインスタンス) で使用したい WPF コントロールが 1 つあります。
さらに、UserControl のすべてのインスタンスで、ResourceDictionary の 1 つのインスタンスを共有したいと考えています。
WPF アプリケーションでは、ResourceDictionary をアプリケーション リソースにマージすることでそれを実現します。
ただし、WinForms アプリケーションで WPF アプリケーション インスタンスを作成したくありません。代わりに、別の方法を探しています。
私は1つの解決策を見つけましたが、コードビハインドを必要としないより良い方法を知っていることを願っています:
ユーザー コントロール.xaml.cs:
それはうまくいきます。しかし、私は XAML でのみ機能するソリューションを好みます。さらに、StaticResources を使用できるようにしたいと考えています。したがって、コントロールの初期化後に静的 ResourceDictionary を Controls MergedDictionaries に追加することはできません。
次のことを試しましたが、奇妙な「スタックが空です」という例外がスローされます。
誰かがより良いアプローチを知っているかもしれません。
ありがとう、ツインハビット
silverlight - Silverlightで相互参照する2つのHierarchicalDataTemplatesを作成するにはどうすればよいですか?
とすれば:
- TargetTypeでDataTemplatesを割り当てることはできません
- StaticResource参照は、以前にのみ参照できます
TreeViewで次の状況をどのようにテンプレート化しますか?
その構造は、次のようなツリーに適しています。
TargetType
のプロパティがあるため、これはWPFのテンプレートでは簡単ですHierarchicalDataTemplate
。Silverlightでは、次のようなことを行う必要があります。
XAMLドキュメントで定義されているため、ResourceTemplate
参照できないため、明らかに機能しません。PropertyTemplate
では、この鶏が先か卵が先かという問題をどのように解決しますか?
silverlight - Silverlight 4: Toolkit を使用せずにアプリ全体のテーマ/スタイルを変更する
WPF からの最初の Silverlight プロジェクトに着手しています。これは比較的単純な Web ポータルであり、WPF ツールキットの経験から、Silverlight Toolkit への言及は避けたいと思います。
私はあまりコーダーではないので、テーマに関していくつか質問があります。
暗黙的なスタイルを使用すると、これが簡単になります。リソース ディクショナリを切り替えてテーマを変更できることは明らかです。ツールキットに頼らずにこれを行うにはどうすればよいですか?
テーマ コンテナーにラップする代わりに、WPF のようにアプリケーション全体にスタイルを適用するにはどうすればよいですか? 使用できる ApplicationThemeURI があるようですが、それにはツールキットが必要です。
ありがとう。