2012-03-20 83 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> 

这工作得很好,只要点击树形视图和项目拓展项目和承包。

我想要做的除此之外是当双击树形视图中的项目时打开一个单独的窗口。有没有办法将这个commmand动作绑定到这个XAML并保持当前的状态?

感谢

+0

当你说“命令行动” ......你的意思是你有一个已经打开的窗口中的'ICommand'实施? – 2012-03-20 19:31:22

+0

是的,我有一个ICommand实现,但我不知道如何将它绑定到双击树形视图... – 2012-03-20 19:43:58

+0

嗨史蒂夫,关于如何将此ICommand绑定到此TreeView的任何想法? – 2012-03-20 20:18:58

回答

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”? – 2012-03-20 19:55:24

+0

我相信TreeViewItem支持MouseDown和MouseLeftButtonDown,但不能直接双击。但是,您可以在处理程序中检查MouseButtonEventArgs的“ClickCount”属性,以查看它是双击还是单击。 – 2012-03-20 19:59:59

+0

当我尝试添加一行时,出现错误“试图导航到事件处理程序时发生未知错误,请重建您的项目并重试”。我试图重建它很多次,它仍然给我这个错误。有任何想法吗?我尝试“右键单击”并按照“导航到EventHandler”并得到相同的错误。 – 2012-03-20 21:30:24

0

你想使用InputBindings属性如下:

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

这些都没有提供验证码的后面(这是由马茨回答需要)的优势,利用ICommand你已经写了。

我不确定您是否可以在风格中设置它们;你可能需要做的是这样设置的TreeViewItemTemplate然后用InputBindingsControlTemplate

相关问题