你的位置:首页 > 软件开发 > ASP.net > WPF如何实现TreeView节点重命名

WPF如何实现TreeView节点重命名

发布时间:2015-04-14 01:00:30
我们经常看到一些软件比如酷狗音乐,在对列表右键进行重命名的时候,当前列表会泛白并且进入可编辑状态,当我们更改完成后就会并进入非编辑状态,这些具体是怎么实现的呢?下面的方法也许会提供一些思路,下面的TreeView节点是通过数据双向绑定的方式,绑定到TextBlock控件和Text ...

      我们经常看到一些软件比如酷狗音乐,在对列表右键进行重命名的时候,当前列表会泛白并且进入可编辑状态,当我们更改完成后就会并进入非编辑状态,这些具体是怎么实现的呢?下面的方法也许会提供一些思路,下面的TreeView节点是通过数据双向绑定的方式,绑定到TextBlock控件和TextBox控件的Text属性上,并且让两者绑定相同的属性,同时使TextBox控件刚好完全覆盖TextBlock控件, 由于TextBlock控件和TextBox控件的区别,TextBlock控件无法实现编辑,所以我在TextBlock控件的上面覆盖了一个TextBox控件,初始状态下我们设置TextBox的Visibility属性为Collapsed当我们点击重命名的时候,我们再设置TextBox的Visibility属性为Visible,这样我们就能够进行节点的重命名,当然当我们命名完成后(该TextBox失去焦点之后)我们再设置TextBox的Visibility属性为Collapsed,这样就完成了重命名的过程,当然我们还有很多重要的工作要做,比如如何获取HierarchicalDataTemplate中的TextBox控件这个是关键,其次TextBlock控件和TextBox控件必须同时绑定到同一属性,这样当属性值发生改变时,就能够更改TextBlock的Text属性值。注意:TextBox的默认绑定方式Mode=TwoWay。

前端XAML代码(关键部分)

<TreeView.ItemTemplate>

       <HierarchicalDataTemplate DataType="{x:Type localex:TreeMode}" ItemsSource="{Binding Children}">

            <CheckBox Tag="{Binding Children}" IsChecked="{Binding IsChecked, Mode=TwoWay}" ToolTip="{Binding ToolTip}">

               <StackPanel Orientation="Horizontal">

                   <Image VerticalAlignment="Center" Source="{Binding Icon}"/>

                      <StackPanel Orientation="Vertical">

                      <TextBlock Text="{Binding Name, Mode=TwoWay}" HorizontalAlignment="Center" Width="Auto"/>

                       <TextBox x:Name="renametextbox" Text="{Binding Name, Mode=TwoWay}" HorizontalAlignment="Center" Margin="0,-20,0,0"

                             Width="Auto"  Visibility="Collapsed"  LostFocus="renametextbox_LostFous"/>

                       </StackPanel>

                 </StackPanel>

              <CheckBox.ContextMenu>

                  <ContextMenu>

                     <MenuItem  Name="reNameItem" Header="重命名" Click="ReNameTreeViewItem_Click">                                              

                     </MenuItem>

                  </ContextMenu>

               </CheckBox.ContextMenu>

            </CheckBox>                               

        </HierarchicalDataTemplate>

  </TreeView.ItemTemplate> 

 

后端核心代码:

        //下面的部分是在鼠标指针位于此元素(TreeViewItem)上并且按下鼠标右键时发生。

        private void TreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)

原标题:WPF如何实现TreeView节点重命名

关键词:wpf

wpf
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。