Доступ к элементам управления свойствами окна со страницы в WPF - PullRequest
0 голосов
/ 24 марта 2010

Моя проблема в том, что я хочу получить доступ со страницы к свойствам элемента управления (кнопка, текстовый блок, метка или элемент меню окна ...), размещенного в окне.Страница помещается в окно.Как я могу это сделать?Есть ли способ найти элементы управления по имени в определенном окне или на странице или во всем приложении?

Ответы [ 3 ]

1 голос
/ 26 марта 2010

Я получил ссылку на окно, используя Reflection:

    public static Window WindowByName(string strWindowName)
    {
        if (string.IsNullOrEmpty(strWindowName)) return null;

        Assembly asm = Assembly.GetExecutingAssembly();
        string strFullyQualifiedName = asm.GetName().Name + "." + strWindowName;
        object obj = asm.CreateInstance(strFullyQualifiedName);

        if (obj != null)
            return obj as Window;
        else
            return null;
    }

с помощью вышеуказанного метода я получаю ссылку на WinMain.xaml, а затем обращаюсь к его элементам управления, используя метод FindName из кода PageRutas.xaml, например:

        // Retrieve reference WinMain.xaml reference
        Window win = cWindow.WindowByName("WinMain");

        // Retrieve listbox reference
        System.Windows.Controls.ListBox lstbox = 
             (System.Windows.Controls.ListBox)win.FindName("LayoutListBox");

        // Modifying IsEnabled property
        lstbox.IsEnabled = false;

но теперь ... У меня есть другая проблема .... свойство изменилось на false после выполнения lstbox.IsEnable = false; но что-то странное происходит потому, что пользовательский интерфейс WinMain.xaml, кажется, игнорирует внесенные мной изменения (список не отключен в пользовательском интерфейсе). Что происходит? кто-нибудь может мне помочь?

Спасибо.

1 голос
/ 24 марта 2010

Объект Window имеет метод FindName () (унаследованный от FrameworkElement). MSDN: http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.findname.aspx

Если я правильно понимаю, вам нужно будет использовать отражение для перечисления свойств элемента управления.

Обновление:

В XAML у вас будет что-то вроде этого:

ListBox o = this.FindName("myListBox") as ListBox;

В коде для окна вы можете использовать:

<Window>
    <Grid>
        <ListBox x:Name="myListBox" />
    </Grid>
</Window>

В этом процессе нет «нового».

0 голосов
/ 10 октября 2013
var mainWindow = Application.Current.MainWindow as MainWindow; 

// Где MainWindow - тип окна

используйте mainWindow.controlName для доступа к элементу управления

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