与えられた 2 つのアプリケーション:
- すべてのコントロールが AutomationId を持っているわけではなく、変更できない1 つの WPFアプリケーション。さらに、アプリケーションは AutomationId を設定せずに実行時にコントロールを追加します。
- 上記の WPF アプリケーションを自動化する 1 つのコンソール アプリケーション
ほぼ同じ時間内にすべての要素にアクセスしたいので、それが必要です。(使用する直前に自動化要素を検索すると、時間が (ms から s まで) 大きく異なるようです - 要素の量やツリー層によって異なります)
WPF の実行時に、コンソール アプリケーション内で WPF コントロールの AutomationIds を設定したいと考えています。この問題の解決策を考えられる場合は、知っておくと便利です!
私が今まで試したこと:
1.)反省
Type type = element.GetType();
FieldInfo fi = type.GetField("AutomationIdProperty");
fi.SetValue(element, "x"); //Error
エラー メッセージ:「'System.String' 型のオブジェクトを 'System.Windows.Automation.AutomationProperty' 型に変換できません」
代わりに次を使用すると、エラーはスローされませんが、XAML では何も変更されません
fi.SetValue(element, AutomationElement.AutomationIdProperty);
2.)直接
AutomationElement element; // = my AutomationElement
element.Current.AutomationId = "x"; //since AutomationId is Readonly - its not possible
3.) DependencyObjectsとDependencyPropertiesも有望に思えますが、これまでのところ解決策を思いつきませんでした。誰かがそれを経験していますか??