問題タブ [findancestor]

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 に答える
71317 参照

wpf - WPFデータバインディングの「RelativeSourceFindAncestor」は正確に何をしますか?

現在、ウィンドウ内でホストされていることがわかっているWPFユーザーコントロール(XAMLファイルのルート要素は「UserControl」)内で作業しています。データバインディングを使用してウィンドウのプロパティにアクセスするにはどうすればよいですか?

なぜ単純に誰かが知っていますか

動作しません?私が受け取るエラーメッセージは次のとおりです。

System.Windows.Data警告:4:参照'RelativeSource FindAncestor、AncestorType ='System.Windows.Window'、AncestorLevel='1''でバインドするためのソースが見つかりません。

編集:私はArsenMkrtのアプローチのバリエーションを使用することになったので、彼の答えを受け入れました。ただし、FindAncestorが「正しく機能しない」理由を調べることに興味があります。

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

wpf - Expander.IsExpanedは、現在のテンプレートがToolTipの子孫である場合のみ

アプリケーションのいくつかの場所で、、およびのように(a)を使用DataTemplateしています。StaticResourceItemsControlContentControlToolTip

テンプレートにはが含まれており、が内にある場合はExpanderそのIsExpandedプロパティをtrueにする必要があります。DataTemplateToolTip

何かお勧めはありますか?

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

c# - ListView.ItemTemplate の UserControl に対して FindAncestor が機能しない

FindAncestor モードで ItemTemplate の UserControl のプロパティをバインドしようとすると、いくつかの問題が発生します。

次のコードがあります。

コメント化されたラベル行は正常に機能します (ListView で選択されている場合は True が表示され、それ以外の場合は False が表示されます)。

問題は、何も表示しない MyUserControl にあり、VS は次のように言います。

System.Windows.Data エラー: 40: BindingExpression パス エラー: 'Content' プロパティが 'object' ''String' (HashCode=-1920739956)' に見つかりません。BindingExpression: パス = コンテンツ; DataItem='String' (HashCode=-1920739956); ターゲット要素は「ラベル」(Name=''); ターゲット プロパティは「コンテンツ」(タイプ「オブジェクト」)

MyUserControl には、Content プロパティにバインドされた Label が含まれているだけです。

UserControl が Label コントロールとは異なる動作をする理由を知っている人はいますか? (または、少なくとも、明らかに欠けているものを見つけるのに役立ちますか?)

0 投票する
3 に答える
5416 参照

wpf - ItemsControl 内からの WPF バインディング - FindAncestor が機能しない

こんにちは、

非常に一般的な問題と思われるものがあります。データ コンテキストとしてビュー モデルを持つユーザー コントロールがあります。このユーザー コントロール内の要素は、バインディングの目的でこの ViewModel を使用します。

ビューモデル

私の ViewModel には、単一の Ticket オブジェクトが含まれています。このチケット オブジェクトにはコメントのコレクションが添付されており、これらは ItemsControl を使用してチケット表示ユーザー コントロールにレンダリングされます。

この ItemsControl によってレンダリングされる各 TextBox には、ContextMenu がアタッチされていることがわかります。私がやろうとしているのは、この ContextMenuItem のコマンドを ViewModel の DelegateCommand にバインドすることです。もちろん、単純に使用します。

このコンテキストでの「Binding」は Ticket.Comment と等しいため、有用なものは何も得られないため、HideSelectedText が実際に何であるかはわかりません。

これに似た質問がたくさんあるようで、すべての回答が RelativeSource ソリューションに向けられているようです。元の XAML コードでわかるように、これと他の多くのバージョンを試しました (AncestorLevel を設定した場合と設定しない場合、AncestorType={x:Type ItemsControl}、AncestorType={x:Type Window}、AncestorType= を使用) {x:Type DataTemplate} ect) および ALL は、次のような出力エラーを生成します。

また

では、なぜこの解決策は非常に多くの人に効果があるように見えますが、私にとっては、単純に入力するのと何の違いもありません{Binding HideSelectedText}

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

wpf - ツールバー項目 DataTemplate バインディング RelativeSource 検索で親ツールバーが見つからない

ボタンを含むツールバーがあり、一部のボタンにはコンテンツの画像しかなく、他のボタンにはテキストしかありません。Button Image の width プロパティを、派生した ToolBar クラスのカスタム プロパティにバインドしようとしています。動作することもありますが、次のエラーで失敗することもあります。

System.Windows.Data エラー: 4 : 参照 'RelativeSource FindAncestor、AncestorType='NuiWpfCore.Controls.ToolBar'、AncestorLevel='1'' でバインディングのソースが見つかりません。BindingExpression:Path=IconSize; DataItem=null; ターゲット要素は '画像' (名前 = ''); ターゲット プロパティは 'Width' (タイプ 'Double') です

失敗している要素バインディングを含む xaml を次に示します。DataTemplate は、インラインで作成された DataTemplateSelector から返されます。

バインディングの Source プロパティを持つ ToolBar クラスを次に示します。

この ToolBar クラスは、ToolBarTray で使用される場合と使用されない場合がありますが、特定のシナリオではどちらの場合もバインド検索が失敗します。

なぜこれが失敗するのかについて誰か考えがありますか?

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

wpf - テンプレートの親の cutom プロパティへのバインド

Q: 子コントロールのスタイル DataTrigger からテンプレートの親のカスタム プロパティにバインドするにはどうすればよいですか?

私はこれについて数日間頭を悩ませてきました。

テンプレートを持つスタイルを使用するデータバインドされた TreeView があります。TreeView は ObservableCollection にバインドされ、HierarchicalDataTemplate + DataTemplate はコレクション アイテム内のプロパティにバインドされます。

FontGroup -> フォント

最初に次のようにバインドしようとしました:

次に、それが機能しない可能性があることを読んだので、試しました(AncestorLevel 1 + 3を含む):

UpdateSourceTrigger=PropertyChanged と Mode=TwoWay の組み合わせも試しました

これが欠陥のある設計である場合は、これを行う方法を提案してください: 基本的に、TreeViewItem でプロパティ IsItemSelected が true であるかどうかに基づいて、展開トグル ボタンの画像を変更したいと考えています。

助けてくれてありがとう!

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

c# - プログラムによる RelativeSource FindAncestor バインディングの作成

その場でバインディングをプログラムで作成するコードを書いていますが、RelativeSourceMode が FindAncestor に設定されているバインディングの結果の値を読み取ることができないようです。このモードでコード (XAML ではない) で RelativeSource バインディングを正常に作成した人がいるかどうか疑問に思っていましたか?

Binding トレースをオンにすると、警告は次のようになります。

System.Windows.Data 警告: 64: BindingExpression (ハッシュ = 57957548): RelativeSource (FindAncestor) にはツリー コンテキストが必要です

RelativeSource バインディングを作成するサンプル コードを次に示します。

対応する XAML は次のとおりです。

ツリーが読み込まれるので、FindAncestor バインディングをシミュレートできます (FindAncestor バインディングVisualTreeHelper.GetParent(...)のターゲット要素を見つけてから、それに RelativeSource Self バインディングを適用するだけです) が、なぜこれが機能しないのか興味があります。

前もって感謝します!

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

silverlight - DataTemplateが別のDatatemplateにネストされている場合、father-templateプロパティとのバインドは困難です。

問題がウェブで何度も議論されていることを知っていますか。しかし、私のものは特定のケースであり、私はまだ正しい解決策を見つけていません。

シナリオ:Silverlight 4-2つのHierarchicalDataTemplateによって表示されるデータを含むTreeView。1つは第1レベルのデータ(つまり、TreeViewの親アイテムのデータ)を表示し、もう1つは第2レベルのデータ(子の場合)を表示します。アイテム)。子アイテムテンプレートでは、コントロールの可視性を親テンプレートのデータソースクラスのプロパティにバインドする必要があります。

これはXAMLコードです。

WPFの場合、次のように記述できます。

Visibility = "{Binding DataContext.Ori、Converter = {StaticResource rVisibilityConverter}、RelativeSource = {RelativeSource AncestorLevel = 2、AncestorType = {x:Type TreeViewItem}、Mode = FindAncestor}}"

...そしてそれは確かに機能します。ただし、Silverlightでは、RealitiveSourceを使用したバインディングモードとしてのFindAncestorがサポートされていないことを知っています。Webのソリューションは、ビジュアルツリーのコードビハインドで下にスクロールすることです。ビヘイビアで実現されているか、アタッチされたプロパティで実現されているかは関係ありません。解決策は次のとおりです。

私はこのようなソリューションを何度も使用しましたが、それらは常に機能します。しかし、この場合、私のDataTemplateは別のDataTemplateにネストされており、「OnAttached」メソッドを使用しているとき、「AssociatedObject」のプロパティ「Parent」は何もありません。スクロールするビジュアルツリーがありません

提案はありますか?前もって感謝します!ピレッギ

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

c# - チェック可能なMenuItemを親ウィンドウの最上位(常に最上位)プロパティにバインドする際の問題

ここでどこが間違っているのかわかりません。うまくいけば、あなたの一人が助けることができます。

TabControlを含むウィンドウがあります。TabControlには、「常に最上位」の動作のチェック可能な項目を含むContextMenuがあります。このチェック可能なアイテムを、含まれているWindowのブール値のTopmostプロパティにバインドしたいと思います。

何をしても、バインディングが失敗し、デバッグ出力に「バインディングのソースが見つかりません」というエラーが表示されます。

(これらの抜粋は、実際のコードから大幅に簡略化されています。誤って関連するものを切り取っていないことを願っています。)

最初に私はこれを試しました:

それはうまくいきませんでした。MenuItemがウィンドウ「myWindow」内にあるためですか?RelativeSource Ancestorバインディングを使用する必要がありますか?

だから私はこれを試しました:

それもうまくいきませんでした。

だから今私は立ち往生しています。このバインディングを機能させるにはどうすればよいですか?

注:私のコードビハインドは、これらの要素に対して何もしていません。Window.DataContextなどを設定する必要がありますか?これにより、このウィンドウの他の部分が破損する可能性があります。

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

wpf - Itemscontrolデータテンプレート内からFindAncestorを使用して、データテンプレート外のテキストブロックを検索する

オブジェクトにバインドされたItemsControlがあり、ItemsControlのデータテンプレート内に2つのテキストブロックがあり、最初のテキストブロックのテキストプロパティをこのItemsControlの外側にある別のテキストブロックにバインドしたいと思います。

親データコンテキストでオブジェクトを検索し、Path=TextでTextBlockを検索しようとしました。

一例を以下に示します。