WPFツリービューは、ツリー内のノードを展開および折りたたむために、+および-キーストロークに応答します。すばらしいです!Treeviewはexpand/collapseコマンドバインディングを使用していますか?
既存のコマンドがありますか?ツールバーのボタンやメニュー項目をバインドして、ツリービューで同じ操作を実行できますか?株価指数定数の拡大/縮小に関しては何も表示されません。 TreeView
WPFツリービューは、ツリー内のノードを展開および折りたたむために、+および-キーストロークに応答します。すばらしいです!Treeviewはexpand/collapseコマンドバインディングを使用していますか?
既存のコマンドがありますか?ツールバーのボタンやメニュー項目をバインドして、ツリービューで同じ操作を実行できますか?株価指数定数の拡大/縮小に関しては何も表示されません。 TreeView
はControlTemplate
にTreeViewItem.IsExpanded
にToggleButton.IsChecked
を結合することによってマウスでTreeViewItem
の膨張を処理し、オーバーライドTreeViewItem.OnKeyDown
にキーボードと拡張を扱います。したがって、いいえ、その実装ではコマンドを使用しません。
しかし、あまり手間をかけずに独自のコマンドを追加できます。それは、標準Open
とClose
アプリケーションコマンドに応答するように、この例では、私はTreeView
に行動を追加しました:
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="Open" CommandTarget="{Binding ElementName=treeView1}" Command="Open"/>
<MenuItem Header="Close" CommandTarget="{Binding ElementName=treeView1}" Command="Close"/>
</Menu>
<TreeView>
<i:Interaction.Behaviors>
<local:TreeViewCommandsBehavior/>
</i:Interaction.Behaviors>
<TreeViewItem Header="Root">
<TreeViewItem Header="Item1">
<TreeViewItem Header="Subitem1"/>
<TreeViewItem Header="Subitem2"/>
</TreeViewItem>
<TreeViewItem Header="Item2">
<TreeViewItem Header="Subitem3"/>
<TreeViewItem Header="Subitem4"/>
</TreeViewItem>
</TreeViewItem>
</TreeView>
</DockPanel>
、ここではその仕事をする動作です:
public class TreeViewCommandsBehavior : Behavior<TreeView>
{
private TreeViewItem selectedTreeViewItem;
protected override void OnAttached()
{
AssociatedObject.AddHandler(TreeViewItem.SelectedEvent, new RoutedEventHandler(TreeViewItem_Selected));
AssociatedObject.CommandBindings.Add(new CommandBinding(ApplicationCommands.Open, CommandExecuted));
AssociatedObject.CommandBindings.Add(new CommandBinding(ApplicationCommands.Close, CommandExecuted));
}
private void TreeViewItem_Selected(object sender, RoutedEventArgs e)
{
selectedTreeViewItem = e.OriginalSource as TreeViewItem;
}
private void CommandExecuted(object sender, ExecutedRoutedEventArgs e)
{
bool expand = e.Command == ApplicationCommands.Open;
if (selectedTreeViewItem != null)
selectedTreeViewItem.IsExpanded = expand;
}
}
行動に慣れていない場合は、まず次の名前空間を追加してください:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
そして、あなたのプロジェct。
System.Windows.Interactivityアセンブリは、.NET 4.0ランタイム配布の一部ではありません。 Microsoft Expression Blend SDKの再配布可能ファイルで利用できます。 – dthorpe
どういうわけか、その事実は、おそらくアセンブリの名前のため、私を逃していた。外部アセンブリに依存関係を作成しますが、ビヘイビアを使用することは、コードビハインドを伴わずにこの機能を再利用できるようにするため、大きな利点です。それを指摘してくれてありがとう。 –