Как использовать AutomationProperties.Name?

Вопрос

Может кто-нибудь объяснить (желательно с примером кода), как свойство AutomationProperties.Name используется программно и декларативно с помощью XAML?

Объяснение

Я понимаю, что Coded UI Builder в Visual Studio 2010, например, принимает имя окна как SearchProperty.

Поскольку имя моего окна изменяется, я хотел бы иметь постоянный SearchProperty, на который могут положиться мои кодированные пользовательские интерфейсы.

В приведенном ниже примере кода я не хочу, чтобы заголовок окна был жестко закодирован как "Свойства трубы 1", поскольку это изменяется.

Пример кода

[GeneratedCode("Coded UITest Builder", "10.0.30319.1")]
public class UIListViewPropertiesTable1 : WpfTable
{

    public UIListViewPropertiesTable1(UITestControl searchLimitContainer) : 
            base(searchLimitContainer)
    {
        #region Search Criteria
        this.SearchProperties[WpfTable.PropertyNames.AutomationId] = "listViewProperties";
        this.WindowTitles.Add("Properties of Pipe 1");
        #endregion
    }

    #region Properties
    public WpfText NameOfComponent
    {
        get
        {
            if ((this.mNameOfComponent == null))
            {
                this.mNameOfComponent = new WpfText(this);
                #region Search Criteria
                this.mNameOfComponent.SearchProperties[WpfText.PropertyNames.Name] = "Pipe 1";
                this.mNameOfComponent.WindowTitles.Add("Properties of Pipe 1");
                #endregion
            }
            return this.mNameOfComponent;
        }
    }
    #endregion

    #region Fields
    private WpfText mNameOfComponent;
    #endregion
}

Ссылки

Вот пример: Как добиться: автоматическая работа над обработкой списка связанных или привязанных к данным полей WPF. Я не смог адаптировать его для окна.

Ответ 1

Вы можете изменить прикрепленное свойство AutomationProperties.Name либо в XAML, используя:

AutomationProperties.Name = "новое имя"

или в коде, используя:

Button.SetValue(AutomationProperties.NameProperty, "новое значение" );
или
AutomationProperties.SetName(кнопка, "новое значение" );

Ответ 2

Вы можете передать заголовок окна как параметр своему родительскому элементу и установить этот параметр во время инициализации.

Я делаю так и отлично работает.

Ответ 3

Есть способ обойти это, но его немного уродливо.

Мы будем использовать тот факт, что свойство, содержащее ссылку на окно, кэшируется и не просматривается каждый раз.

Класс uimap является частичным классом, и вы можете иметь код в файле uimap.cs, который считается числом в классе uimap.

Добавьте туда метод, который принимает в качестве параметра заголовок окна и выполняет поиск, и который помещает найденное окно в свойство UIListViewPropertiesTable1 сгенерированного кода.