問題タブ [dependency-properties]
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 / Silverlight依存関係プロパティの「レンダリング」の遅延?
XAMLバインディングを介して依存関係プロパティに初めてアクセスしたことを知る方法はありますか?必要なときにプロパティの値を実際に「レンダリング」できますか?
100または1000のポイントを含む可能性のあるいくつかのPointCollection依存関係プロパティを持つオブジェクト(Controlから派生したクラス)があります。各プロパティは、さまざまなタイプの形状(ポリライン、ポリゴンなど-これよりも複雑ですが、アイデアは得られます)で使用するために、ポイントをさまざまに配置できます。テンプレートを介して、さまざまなXAMLオブジェクトがTemplateBindingを使用してこれらのプロパティにアクセスします。オブジェクトがテンプレートを使用しているため、オブジェクトに使用されているXAMLシェイプがわからないため、バインドできるプロパティとバインドできないプロパティがわかりません。これらのPointCollectionは、実際に必要な場合にのみ入力したいと思います。
通常、.NETでは、プロパティのゲッターにいくつかのロジックがありますが、これらはXAMLデータバインディングによってバイパスされます。
WPFとSilverlightと互換性のあるソリューションが必要です。
オブジェクトのユーザーにとって追加の複雑さを回避するソリューションが欲しいです。
アップデート
これを行うために私が見つけた1つの方法は、ValueConvertersを使用することです。私の状況では、複数のポイントコレクションがありました。主要な部門がありました。データの通常の形状を含むプロパティ。他の領域/コンテキストで再利用するには、2つの代替形状が必要でした。
最初は3部でした。小道具。ただし、1つのプロパティ(通常の形状)を使用し、変換された値を使用して、ポイントを他の2つの目的の形状に変換することもできます。これを行うと、コントロールに1セットのポイントのみが作成されます。ポイントを2次形状に変換する費用は、使用した場合にのみ発生します。これで、メインコントロールは、コントロールでスローされる可能性のあるすべてのテンプレートをデータがどのように検索する必要があるかを予測する必要がなくなりました。これで、テンプレートデザイナーの問題になります。
アップデート2
確かに、INotifyPropertyChangedと通常のプロパティがこれを処理するための推奨される方法です。
c# - この依存関係プロパティの例を拡張して、DockPanel.Dock="Top" のような依存関係プロパティを再作成するにはどうすればよいですか?
どの依存関係プロパティとそうでないかをよりよく理解しようとしています。以下の例を作成して、ユーザーがスライダーを動かす方法に基づいてコンボボックスの選択肢を変更できるようにしました。
これを作成する際に、ViewModel プロパティで使用されるINotifyPropertyChangedと依存関係プロパティは実際には何の関係もないことを知りました。これにより、以下の例が簡略化されました。
DockPanel.Dock="Top"
しかし、次の例から、たとえば、次の種類の XAML の使用を有効にするために、次のような依存関係プロパティを再作成するにはどうすればよいでしょうか。
これは可能ですか?これは、以下のより単純な例と同じ種類の依存関係プロパティの使用ですか? それとも、INotifyPropertyChanged のように、WPF の別の種類のバインド テクノロジですか?
スライダー/コンボボックスの例は次のとおりです。
XAML:
コード ビハインド:
c# - 添付プロパティを作成しましたが、どのように使用すればよいですか?
アタッチされたビヘイビアーが、アプリケーションでフォームのコントロールを構築するために必要なものであるかどうかを判断しようとしています。
したがって、アタッチド ビヘイビアの作成方法を知りたいだけでなく、アタッチド ビヘイビアを使用して問題を解決する実際の例を見たいと思っています。この MSDN の記事を使用して、便利だと思われる方法でプロパティが添付された UserControl を作成しました。つまり、特定の子要素が強調表示されているか、強調表示されていないスタックパネルです。
この例は正常に実行されますが、子要素を強調表示するロジック、または強調表示しないロジック (背景色の変更など) をどこに配置すればよいでしょうか?
XAML:
コードビハインド:
silverlight - Silverlight: ラベルがカスタム DependencyProperty のバインディングを評価しない
ラベルのターゲット プロパティを使用して ComboBox に接続する Silverlight 3 ラベルがあります。MSDN によると、Label クラスはターゲット バインディングを反復処理し、ソースでメタ データを検索して、Label のコンテンツを決定します。
これは、ターゲットが標準コントロールである限り、実際に機能します。しかし、私の場合は ComboBox を拡張するカスタム コントロールを使用し、新しい DependencyProperty を導入すると、単純に無視されます。
たとえば、これは機能します:
上記の例では、SelectedItem Binding が検索され、DataModel.Country には取得された DisplayName が含まれています。
しかし、これはしません:
カスタム プロパティは依存関係プロパティであり、次のように宣言されます。
Label に PropertyPath を定義することでこれを回避できることはわかっていますが、できればこれは避けたいと思います。
だから私の質問は、誰でもこの問題を再現できるかということです。もちろん、もっと重要なのは、誰もそれを解決する方法を知っていますか? :-)
ありがとう、マーカス
wpf - DependencyPropertyをデータバインドできません
DependencyPropertyを持つUserControlがあります。データバインディング式を使用して、ホストウィンドウで値を設定します。ただし、期待どおりに機能しません。
ユーザーコントロールのコードビハインドからのスニペット:
XAMLから(注:CasingListViewはViewBaseから継承します):
何が起こるかは何もありません。具体的には、setterが呼び出されることはなく、プロパティはnullのままです。ソースプロパティCasingListViewModel
に値があることはわかっています。これは、別のプロパティ(DataContext)にバインドしようとしたため、正常に機能しました。
依存関係プロパティはデータバインドできると思いました。私が間違っている?
wpf - WPF-見た目のないコントロールのスタイリング:ControlTemplatesの第2レベルからコントロールの依存プロパティにアクセスする方法は?
いくつかの依存プロパティを追加したいので、 ItemsControl
( )を拡張しています-コレクションにアイテムがない場合に表示されるようなものです(検索結果のitemscontrolで「検索語を入力して検索」ラベルを押すと考えてください) )。class EnhancedItemsControl : ItemsControl
AlternativeContent
サブクラス化してdepItemsControl
を追加しました。AlternativeContent
それへのタイプのプロパティFrameworkElement
。ここで、Themes / Generic.xamlでデフォルトのスタイルを提供したいと思います(AsseblyInfoに追加し、この優れたチュートリアルThemeInfoAttribute
で述べたように、静的costructorでメタデータを提供しました)。
スタイルには、が含まれており、 ItemsControlテンプレート内のControlTemplate
2番目を使用する必要があります。ここに、を表示する必要があるを追加します。ControlTemplate
ContentPresenter
AlternativeContent
さて、私の問題はContentPresenter
、トップレベルからコンテンツを取得する必要があることをどのように伝えるEnhancedItemsControl
かです。私がスタイルの中にいた場合ControlTemplate
、私は使用します:
しかし、私はスタイルの内側ItemsControl
にいるので、これは明らかに機能しません。親テンプレートではなく、祖父母テンプレートを参照する必要がありますが、パラメーターがありません。ControlTemplate
ControlTemplate
TemplateBinding
AncestorLevel
私も試しました:
しかし、その結果も空ContentPresenter
になります。TemplatedParent
(の外にあるため)名前を付けることがControlTemplate
できないため、名前で参照することはできません。を使用することはできませんTemplatedParent
RelativeBinding
。これは、2つのレベルのコントロールテンプレートに到達しないためです。そしてRelativeSource
FindAncestor
奇妙なことに動作しません。
これを解決する方法はありますか?ありがとうございました!
Generic.xaml(抜粋):
制御コード:
使用法(aList<string>
はとして提供されますDataContext
):
wpf - 依存関係プロパティが機能していません。スタイル セッターを使用して設定しようとしています
新しく作成したユーザー コントロールのカスタム スタイルを設定しようとしていますが、「属性 'Property' の値を 'System.Windows.DependencyProperty' 型のオブジェクトに変換できません。」
私は Dependency プロパティを設定したと思っていましたが、そうではないようだったので、いくつかの調査を行って追加しました:
-- MyButton.Xaml.Cs --
残念ながら、これは機能しません。私もこれを試しました:
しかし、それは機能せず、画像は表示されず、前述と同じエラーが生成されました。
何か案は?コハンさんはじめまして。
-- MyButton.Xaml --
-- MYButton スタイル --
wpf - UserControlのDependencyPropertyへのバインド
http://msdn.microsoft.com/en-us/magazine/dd882520.aspxからWPFツールキットのカレンダーにソリューションを適合させようとしていますが、ユーザーコントロールのバインディングを機能させるのに問題があります。FindAncestorとElementNameを使用してみましたが、バインディングエラーが発生します。
ツールチップとカレンダーのDataContextに関係があるのではないかと思います。他の誰かがこの問題を抱えていましたか?
エラーは次のとおりです。
そして、DependencyPropertyの宣言:
同じことが起こる別のコントロールがあるので、何かが足りないのではないかと思います。
wpf - WinDbg で DependencyProperty の値を確認するにはどうすればよいですか?
WinDbg を使用して、Silverlight アプリケーションのメモリ リークをデバッグしようとすると、DependencyProperty として実装されているオブジェクトのプロパティに遭遇します。デバッガ (WinDbg) でオブジェクトをダンプすると、プロパティが表示されます。実際の静的フィールドを参照してください。
不動産の実際の価値をどのように見ることができますか?
wpf - WPF 依存関係プロパティが認識されない
通常の clr プロパティにバインドできないという制限を克服しようとしています。
私が使用するソリューションでは、clr プロパティを変更するカスタム依存関係プロパティを使用します。
ここにコードがあります
しかし、何かを BoundSelectionStart にバインドしようとすると、DP にのみバインドできると表示されます。
何が問題ですか?