В WPF, как динамически загружаемый элемент может получить доступ к элементам своего родителя? - PullRequest
1 голос
/ 17 марта 2009

В Window1.xaml У меня есть меню и область отображения:

<Menu x:Name="TheMenu" Width="Auto" Height="25" DockPanel.Dock="Top"/>
<ItemsControl x:Name="MainContent" DockPanel.Dock="Top"/>

В Window1.xaml.cs Я динамически загружаю в пункт меню:

MenuItem menuItemEmployees = new MenuItemEmployees(this);
TheMenu.Items.Add(menuItemEmployees);

В MenuItemEmployees.xaml.cs Я внедряю Window1, но как мне получить доступ к его элементам?

using System.Windows.Controls;
using System.Windows;

namespace TestContainer1
{
    public partial class MenuItemEmployees : MenuItem
    {
        public MenuItemEmployees(Window1 window1)
        {
            InitializeComponent();
        }

        private void Create_Employee(object sender, System.Windows.RoutedEventArgs e)
        {
            TextBlock textBlock = new TextBlock();
            textBlock.Text = "New Customer";

            //how can I access my ItemsControl element in "Window1" here?
            //pseudo code:
            Window1.Children["MainContent"].Add(textBlock);
        }
    }
}

ОТВЕТ:

Хорошо, я понял, это был просто недосмотр, я забыл создать внутреннюю переменную для window1. Но я оставлю этот код здесь, может быть интересно, очень легко передать главное окно в элементы управления, чтобы динамически добавленные элементы управления могли обращаться к другим элементам в окне, что-то вроде инъекции зависимостей бедного человека без интерфейсов: *

using System.Windows.Controls;
using System.Windows;

namespace TestContainer1
{
    public partial class MenuItemEmployees : MenuItem
    {
        private Window1 _window1;

        public MenuItemEmployees(Window1 window1)
        {
            InitializeComponent();
            _window1 = window1;
        }

        private void Create_Employee(object sender, System.Windows.RoutedEventArgs e)
        {
            TextBlock textBlock = new TextBlock();
            textBlock.Text = "New Customer";

            _window1.MainContent.Items.Add(textBlock);
        }
    }
}

1 Ответ

1 голос
/ 17 марта 2009

Попробуйте что-то вроде этого

Menu yourMenu = ItemContainerGenerator.ContainerFromItem(this) as Menu;
Window yourWindow = Menu.Parent as Window;    

ContainerFromItem - это статический метод, который делает то, что вы хотите, см. Сообщение Microsoft здесь .

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