FindNameは私にとって壊れています:(
私が探しているオブジェクトはそこにあります。証拠があります。
シナリオは次のとおりです。
ToggleButton button = (ToggleButton)sender;
Popup popup = (Popup)button.FindName("popSelectIteration");
popup
はnullですが、常にではありません。たまに。しかし、 null に設定されている場合でも、探している子がそこにいます。
null のときにブレーク ポイントを設定し、これら 2 つのスクリーンショットを取得しました。
これは、FindName が "popSelectIteration" に対して null を返す場所です。
しかし、時計を掘り下げると、そこに子供がいることがわかります。
それで、私は何が欠けていますか?FindName が見つからないのはなぜですか? スクリーン ショットからわかるように、これはタイミングの問題ではありません (FindName ウォッチは null ですが、ダイレクト パスは問題ありません)。
コントロールを見つけるより良い方法はありますか?
補足:問題のトグル ボタンの XAML に興味がある場合は、次の質問で見つけることができます: WPF - FrameworkElement - すべての子孫を列挙しますか? .
更新:これが失敗する場合と機能する場合がある理由を調べるために、いくつかの掘り下げを行いました。私は呼び出すアニメーションを持っていますNameScope.SetNameScope((DependencyObject)form, new NameScope());
(完全なメソッドコードはこちら)。その呼び出しの直後に、FindName が失敗し始めます。
私はその電話を本当に理解していません。コードをコピーして貼り付けたと思います。とにかく、コメントアウトしました。しかし、これが失敗する理由を知りたいです。