Передача события WPF между двумя дочерними пользовательскими элементами управления основного пользовательского элемента управления

#wpf #user-controls #handler #event-binding

#wpf #пользовательские элементы управления #обработчик #привязка события

Вопрос:

Я использую Visual Studio 2010. У меня есть два пользовательских класса usercontrol в wpf. И существует основной класс пользовательского элемента управления с именем MainWindow.xaml. Я добавил два разных класса с именами ListTreeviewContentPane.xaml и ToolBarMenuContentPane.xaml. В MainWindow.xaml я добавил их, используя этот тип кода-

 <local:ListTreeViewContentPane x:Name="usertreeview"></local:ListTreeViewContentPane>
<local:ToolBarMenuContentPane x:Name="usertoolbar"></local:ToolBarMenuContentPane>
  

Я хочу щелкнуть в usertreeview и для этого запустить код в usertoolbar. Но проблема в том, что usertreeview не имеет понятия об экземпляре usertoolbar. Я сделал это с помощью делегата и события. Но поскольку они являются дочерними элементами Mainwindow. Возможно ли создать действие в usertreeview и перехватить его или написать обработчик в usertoolbar или внести изменения в usertoolbar без использования делегирования и привязки события?

или это возможно — щелкнуть в usertreeview и внести изменения в usertoolbar, поскольку они оба являются дочерними элементами mainwindow без использования делегирования?

Ответ №1:

Используя взаимодействие из Blend SDK, вы можете запускать события в других элементах управления и вызывать методы, которые, похоже, соответствуют вашей проблеме, например

 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
  
 <TextBox>
    <i:Interaction.Triggers>
        <i:EventTrigger SourceName="buton" EventName="Click">
            <ei:CallMethodAction MethodName="Clear" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBox>
<Button Name="buton" Content="Clear Text" />
  

При нажатии кнопки срабатывает триггер в текстовом поле и вызывается метод Clear в текстовом поле, очищающий текст.