单击TreeView项打开窗口?

时间:2012-03-20 19:00:16

标签: wpf xaml treeview

我有以下XAML代码:

<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>

只要点击树视图中的项目以及展开和收缩的项目,这就可以正常工作。

除此之外,我想要做的是在双击树视图中的项目时打开一个单独的窗口。有没有办法将此命令操作绑定到此XAML并保留当前存在的内容?

由于

2 个答案:

答案 0 :(得分: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>

然后处理在事件处理程序中打开窗口。

答案 1 :(得分:0)

您想使用InputBindings属性,如下所示:

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

这些优点是不需要后面的代码(Matts的答案需要)并使用你已经写过的ICommand

我不确定你是否能够将它们设置成一种风格;您可能需要执行以下操作:设置Template的{​​{1}},然后使用TreeViewItem

中的InputBindings