2012-03-20 10 views
0

私は、次のXAMLコードを持っている:TreeView Item On Windowをクリックしますか?

<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にバインドして現在の状態をそのまま残す方法はありますか?あなたのスタイルにEventSetterをしたいよう

おかげ

+0

InputBindingsを使用して...あなたは既にウィンドウが開き 'ICommand'実装を持っていることを意味するかのように、あなたは何かをする必要がある場合があります? –

+0

はい、私はICommandの実装がありますが、ダブルクリックでツリービューにバインドする方法がわかりません... –

+0

こんにちはスティーブ、このTreeViewにこのICommandをバインドする方法のアイデア? –

答えて

0

サウンズ:

 <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"というイベントは1つだけあり、 "Click"または "Double-Click"はありませんか? –

+0

TreeViewItemはMouseDownとMouseLeftButtonDownをサポートしていますが、直接ダブルクリックはできません。ただし、ハンドラー内のMouseButtonEventArgsの "ClickCount"プロパティをチェックして、ダブルクリックかシングルクリックかを確認することができます。 –

+0

行を追加しようとすると、「イベントハンドラにナビゲートしようとしたときに不明なエラーが発生しました。私は何度もそれを再構築しようとしましたが、それでも私にはこのエラーが出ます。何か案は?私は "右クリック"して "Navigate To EventHandler"を試み、同じエラーを取得します。 –

0

あなたは以下のようにInputBindingsプロパティを使用したい:

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

これらは、(Mattsの答えによって必要とされる)の背後にあるコードを必要としないという利点を持っているとICommandすでに書かれているのを利用します。

スタイルでこれらを設定できるかどうかわかりません。 TreeViewItemTemplateを設定して、あなたは「コマンド・アクション」と言うときControlTemplate

関連する問題