問題タブ [freezable]
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.
c# - 辞書フリーザブルで
Freezable
Dictionary を 1 つの として含むを作成したいDependencyProperty
。freezable Dictionary
がフリーズしたときに変更してはならないので、必要だと思いますFreezable
...または間違っていますか?もしそうなら、私は本当に何をしなければなりませんか?
c# - WPF: Freezable と Visual の違い
確かに、Freezable クラスと WPF の Visual クラスはまったく異なる目的を持っています。私の質問は、Visual クラスまたは Freezable クラスのいずれかを実装するオブジェクトの違いに焦点を当てています。どちらも通常、グラフィックの問題に関連しているため、混乱しました。
では、グラフィカルな表現とビジュアルの方法での Freezable の目的は正確には何ですか?
c# - 複数の UI スレッド間で共有されるスタイルで DynamicResource と共に Pen を使用する
タイプの依存関係プロパティを持つカスタム WPF コントロールがありますPen
(コントロール内の分割線のスタイルを設定するために使用されます)。
このプロパティの既定値はシステム カラーであると想定されています。この既定値を使用する場合、ユーザーが (Windows 設定で) システム カラーを変更すると、コントロールを更新する必要があります。
これまでのところ、このデフォルト値をデフォルト コントロール スタイルの一部として指定しました。
コントロールが単一の UI スレッドでのみ使用されている限り、これは正常に機能します。ただし、別の UI スレッドで実行される複数の最上位ウィンドウでコントロールを使用すると、次の例外が発生します。
どうやら、<Pen>
インスタンス内で動的リソースを使用すると、スタイルが凍結されるのを防ぐことができます。
これまでのところ、2 つの解決策を考えることができます。
1) スタイルにセットx:Shared="False"
します。すべてのコントロール インスタンスは、既定のスタイルの独自のコピーを取得するため、固定する必要はありません。ただし、このスタイルには他にもいくつかのセッター (重要なテンプレートを含む) があるため、それらをコントロールの複数のインスタンスで共有できるようにしたいと考えています。
2) タイプのPen
プロパティを、ブラシ、太さ、ダッシュ スタイルなどの個別のプロパティに分割します。これにより{DynamicResource}
、スタイルのセッターで直接使用され、スタイルを固定できます。(ただし、スタイルがいつフリーズ可能になるかについての正確な詳細はわかりません)ペン型のプロパティが複数あり、それぞれにユーザーがカスタマイズしたいプロパティがかなりあるため、この解決策は望ましくありません。また、コントロールのパブリック API に重大な変更を導入することなく、この例外を修正したいと考えています。
他のアイデアはありますか?DividerPen プロパティにこの種の既定値を指定する他の方法はありますか?
複数の UI スレッドの意味について混乱があるように思われるので、独自のスレッドで新しいウィンドウを開くコードを次に示します。
wpf - Storyboard.TargetProperty="スタイル"
WindowsRT がこの方向に進んでいるように見え、異なるコードの量を最小限に抑えたいため、トリガーとテーマの使用から VisualStateManager に切り替えようとしています。その趣旨で、Surface 2 などのタブレット デバイスの大きなマージンと、デスクトップ スキームの通常の外観のマージンとを切り替える単純なスキームを設定しようとしています。オブジェクトにプロパティを直接設定することでこれを実行できることはわかっていますが、コントロールに 15 個のラベルがある場合、すべてのラベルにマージンを設定するストーリーボードを作成することは単にサポートできません。だから私はこのコードで各ラベルのスタイルを交換しようとしています:
私の検索では、Silverlight と Windows ストア アプリケーションで動作するほぼ同じパターンを示すいくつかの例を見てきました。従来の WPF でこれを試してみると、「このフリーズ可能なものはフリーズできません」というメッセージが表示されます。Reflector でコードを掘り下げ、Style が DependencyObject から派生していないため、何を凍結しようとしているのか混乱しています。ここで何が起こっているのか、誰にも手がかりがありますか?
c# - WPF - ストーリーボードにリソースの解凍と再凍結を強制する
私の WPF アプリケーションでは、ユーザーがカスタムのライト テーマとダーク テーマを切り替えることができるようにしています。コントロール テンプレートの 1 つのセットを使用し、ブラシ リソースを交換してテーマの切り替えを処理します。
これは、コントロール テンプレートのストーリーボード内のアニメーションで参照されるブラシを除いて、非常にうまく機能します。
ストーリーボードは、その中のすべてのリソースをフリーズします。
これにより、マージされたすべての辞書をクリアしてリロードする必要があります。私はそれを避けようとしています。
Q: ストーリーボードを強制的に解凍し、そのリソースを更新して再凍結する方法はありますか?
Storyboard のクローンを作成し、親の VisualState を更新しようとしましたが、うまくいかないようでした。
筋金入りの WPF 専門家はいますか? :)
wpf - パス データをフリーズする方法
Path
WPF アプリケーションには多くの複雑な があります。例は次のとおりです。
ほとんどのコントロール テンプレートでは、ベクター グラフィックスを多用する必要があり、複数の効果がこれらのパスに適用されます。
Data
パフォーマンス上の理由から、これらのパスは変更されないため、フリーズする必要があります。使用しているこの構文は、 を作成し、StreamGeometry
それにデータを割り当てます。StreamGeometry
フリーズ可能ですが、どうすれば xaml でフリーズできますか?
wpf - ResourceDictionary の Freezable に対して DynamicResource を動的にする方法はありますか?
私はBrushes.xamlにこれを持っています:
そして、Generic.xaml で次のように使用します。
問題は、wpf がブラシをフリーズするため、DynamicResource
効果がないことです。
これを解決するきれいな方法はありますか?厄介なハックしか思い浮かびません。