WPF: ссылка на окно из пользовательского элемента управления - PullRequest
2 голосов
/ 30 марта 2009

Я следовал инструкциям принятого ответа от этого поста в отношении создания кода для файла для словаря ресурсов, и это сработало ... так что теперь я могу прикреплять события к элементам управления в generic.xml файл.

Но теперь я хочу иметь возможность вызывать метод DragMove() из какого-либо события, и поскольку в то время нет никаких ссылок на окно, содержащее словарь, я не знаю, как это вызвать DragMove() метод.

Итак, из кода словаря ресурсов за файлом, можно ли как-нибудь сделать ссылку на окно, в котором в данный момент будет размещен этот словарь ресурсов?


[Обновление] (временное решение)

В качестве простого (но глупого) обходного пути в настоящее время я сделал следующее:
Поскольку я могу ссылаться на Application.Current.MainWindow из кода Generic.xaml.cs, теперь у меня есть это в Generic.xaml.cs:

private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{               
    Application.Current.MainWindow.DragMove();
}

А потом я прикрепляю обработчик PreviewMouseLeftButtonDown к каждому Window, вот так:

private void Window_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    Application.Current.MainWindow = this;
}

Это, ну, это работает ... и пока кто-то не сможет придумать, как это сделать, Он должен служить мне достаточно хорошо.

Ответы [ 3 ]

2 голосов
/ 30 марта 2009

Я не знаю, как это сделать. Однако, если вы пытаетесь определить Window для конкретного ресурса, вы можете использовать RelativeSource:

<SolidColorBrush x:Key="MyBrush" Color="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Converter={StaticResource WindowToColorConverter}"/>

И если вы делаете это из кода, вы можете использовать Window.GetWindow () . Вам просто нужен DependencyObject, размещенный в этом Window.

0 голосов
/ 30 марта 2009

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

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

0 голосов
/ 30 марта 2009

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

Application.Current.MainWindow

Надеюсь, это поможет

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