2012-03-20 2 views
0

У меня есть следующий код XAML:Нажмите на элемент TreeView, чтобы открыть окно?

<UserControl 
    x:Class="TreeViewWithViewModelDemo.LoadOnDemand.LoadOnDemandDemoControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:TreeViewWithViewModelDemo.LoadOnDemand" 
    > 
    <DockPanel> 
     <TreeView ItemsSource="{Binding MyData}"> 

     <TreeView.ItemContainerStyle> 

      <Style TargetType="{x:Type TreeViewItem}"> 
      <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
      <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
      <Setter Property="FontWeight" Value="Normal" /> 
      <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
       <Setter Property="FontWeight" Value="Bold" /> 
       </Trigger> 
      </Style.Triggers> 
      </Style> 

     </TreeView.ItemContainerStyle> 

     </TreeView> 
    </DockPanel> 
    </UserControl> 

Это прекрасно работает, насколько нажав на элемент в TreeView и пунктов расширяться и сжиматься.

Что бы я хотел сделать в дополнение к этому, нужно открыть отдельное окно, когда элемент в древовидной структуре дважды щелкнут. Есть ли способ связать это действие commmand с этим XAML и оставить то, что в настоящее время существует как есть?

Благодаря

+0

Когда вы говорите, «Действие команды» ... вы имеете в виду, что у вас есть 'реализация ICommand', которая открывает окно уже ? –

+0

Да, у меня есть реализация ICommand, но я не уверен, как связать ее с древовидной структурой с помощью двойного щелчка ... –

+0

Привет, Стив, Есть идеи о том, как связать эту ICommand с этим TreeView? –

ответ

0

Похоже, вы хотите EventSetter для вашего стиля:

 <Style TargetType="{x:Type TreeViewItem}"> 
     <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
     <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
     <EventSetter Event="MouseDown" Handler="TreeViewItem_MouseDown"/> 
     <Setter Property="FontWeight" Value="Normal" /> 
     <Style.Triggers> 
      <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="FontWeight" Value="Bold" /> 
      </Trigger> 
     </Style.Triggers> 
     </Style> 

Затем обработать открыв окно в обработчик событий.

+0

Я попробую это ... Есть ли только одно событие «MouseDown» и нет «Click» или «Double-Click»? –

+0

Я считаю, что TreeViewItem поддерживает MouseDown и MouseLeftButtonDown, но не двойным щелчком мыши. Однако вы можете проверить свойство ClickCount для MouseButtonEventArgs в вашем обработчике, чтобы узнать, является ли это двойным или одним щелчком мыши. –

+0

Когда я пытаюсь добавить строку Я получаю сообщение об ошибке «Неизвестная ошибка при попытке перейти к обработчику событий. Восстановите свой проект и повторите попытку». Я пытался перестроить его много раз, и это все еще дает мне эту ошибку. Есть идеи? Я пытаюсь «щелкнуть правой кнопкой мыши» и следовать «Навигация к EventHandler» и получить ту же ошибку. –

0

Вы хотите использовать InputBindings свойство, как показано ниже:

<TreeViewItem> 
    <TreeViewItem.InputBindings> 
     <MouseBinding Gesture="LeftDoubleClick" Command="{Binding Path.To.YourCommand}" /> 
    </TreeViewItem.InputBindings> 
</TreeViewItem> 

Они имеют преимущество не нуждаясь код позади (который необходим Matts ответ) и использовать из ICommand вы уже писали.

Я не уверен, что вы сможете установить их в стиле; вам может понадобиться, чтобы сделать что-то вроде установки Template в TreeViewItem, а затем использовать InputBindings в ControlTemplate