2009-03-30 3 views
2

Я выполнил инструкции принятого ответа от this post в отношении создания кода, лежащего за файлом для словаря ресурсов, и он сработал ... поэтому теперь я могу прикреплять события к элементам управления в общем .xml.WPF: ссылка на окно из пользовательского элемента управления

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

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


[Update] (временное решение)

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

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

А потом я прикрепление PreviewMouseLeftButtonDown обработчик е ACH Window меня, как, например:

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

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

ответ

2

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

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

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

-1

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

Application.Current.MainWindow 

Надеется, что это помогает

+0

Это не текущее окно , это главное окно. Они часто не одно и то же. –

0

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

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

Смежные вопросы