Нажмите на TreeView Элемент открывает окно? - PullRequest
0 голосов
/ 20 марта 2012

У меня есть следующий код 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 голосов
/ 21 марта 2012

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

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

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

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

0 голосов
/ 20 марта 2012

Звучит так, как будто вы хотите 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>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...