标签: treeviewitem

突出显示WPF中的整个TreeViewItem行

如果我设置TreeViewItem背景,它只突出显示标题.我怎样才能突出整条线?

我发现了一个几乎解决问题的帖子http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b04f73e2-0b10-4d97-a6da-64df2e30c21d/

但是存在一些问题:1.它没有突出整行2.树在Vista上有XP风格.我希望它在Vista上的外观和原来一样,但如果用户将主题更改为XP - 它应该是XP方式.这么多XAML ......

任何想法,我应该寻找什么?

wpf templates treeviewitem

62
推荐指数
4
解决办法
5万
查看次数

XAML Treeviewitem的上下文菜单(由不同的属性区分)

在XAML中,如何为不同属性区分的treeviewitems定义上下文菜单?

wpf xaml contextmenu treeviewitem

22
推荐指数
3
解决办法
4万
查看次数

为什么每次双击都会多次引发TreeViewItem的MouseDoubleClick事件?

XAML

<TreeView Name="GroupView" ItemsSource="{Binding Documents}">
            <TreeView.ItemContainerStyle>
                <Style TargetType="{x:Type TreeViewItem}">
                    <EventSetter Event="MouseDoubleClick" Handler="OnTreeNodeDoubleClick"/>
                </Style>
            </TreeView.ItemContainerStyle>
            ....
</TreeView>
Run Code Online (Sandbox Code Playgroud)

代码隐藏

private void OnTreeNodeDoubleClick(object sender, MouseButtonEventArgs mouseEvtArgs)
       {
           Console.WriteLine("{3} MouseDoubleClick Clicks={0} ChangedButton={1} Source={2} Handled={4} ButtonState={5}",
               mouseEvtArgs.ClickCount, mouseEvtArgs.ChangedButton, mouseEvtArgs.OriginalSource,
               mouseEvtArgs.Timestamp, mouseEvtArgs.Handled, mouseEvtArgs.ButtonState);
       }
Run Code Online (Sandbox Code Playgroud)

我发现只需双击一次,就会多次调用事件处理程序.我试图在选项卡中打开一个文件,双击相应的树节点; 所以我需要过滤掉额外的电话.

23479156 MouseDoubleClick Clicks=1 ChangedButton=Left Source=System.Windows.Controls.TextBlock Handled=False ButtonState=Pressed
23479156 MouseDoubleClick Clicks=1 ChangedButton=Left Source=System.Windows.Controls.TextBlock Handled=False ButtonState=Pressed
Run Code Online (Sandbox Code Playgroud)

在我稍微复杂的应用程序中,每次双击它会被提升4次.在一个简单的repro-app上,每次双击它会被提升2次.此外,所有的事件参数参数也是相同的,所以我无法区分最后一个参数.

任何想法为什么这是它的方式?

wpf treeview mouseevent treeviewitem

21
推荐指数
5
解决办法
1万
查看次数

在WPF中,如何在右键单击光标下选择树视图项?

在WPF中,当我右键单击树视图项时,我希望在显示上下文菜单之前选择/激活它.

这听起来很简单,但是包含hierachicalDataTemplate会使事情变得复杂.

我有以下树视图:

<TreeView 
            x:Name="trv"
            ContextMenu="{StaticResource contextMenu}"
            ItemTemplate="{StaticResource treeHierarchicalDataTemplate}"
            ItemsSource="{Binding Source={StaticResource meetingItems}}" >

            <TreeView.ItemContainerStyle>
                <Style TargetType="{x:Type TreeViewItem}">
                    <EventSetter Event="TreeViewItem.PreviewMouseRightButtonDown" Handler="trv_PreviewMouseRightButtonDown"/>
                    <Setter Property="IsExpanded" Value="True"></Setter>
                </Style>
            </TreeView.ItemContainerStyle>
        </TreeView>
Run Code Online (Sandbox Code Playgroud)

这是我的事件处理程序......

private void trv_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    TreeViewItem item = sender as TreeViewItem;
    if (item != null)
    {
        item.Focus();
        e.Handled = true;
    }

}
Run Code Online (Sandbox Code Playgroud)

请注意我如何添加上面的EventSetter.这个ALMOST有效.但它只选择根级树视图节点(即我右键单击的节点的根父节点).这可能是因为我的分层数据模板?此模板可以包含相同类型的子项.

这是我的分层数据模板......

<HierarchicalDataTemplate x:Key="treeHierarchicalDataTemplate" 
                          ItemsSource="{Binding Path=ChildMeetingItems}">
    <HierarchicalDataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=Red}" Value="True">
            <Setter TargetName="img" Property="Image.Source" Value="pack://siteoforigin:,,,/images/bookRed.png"></Setter>
        </DataTrigger>
    </HierarchicalDataTemplate.Triggers>
    <StackPanel 
        x:Name="treeViewItemPanel"
        Background="Transparent"
        Orientation="Horizontal">
        <Image Width="16" Height="16"  x:Name="img" Margin="0,0,4,0" Source="pack://siteoforigin:,,,/images/bookGreen.png"></Image>
        <TextBlock Foreground="DarkGray" …
Run Code Online (Sandbox Code Playgroud)

wpf treeview treeviewitem

17
推荐指数
2
解决办法
2万
查看次数

在HierarchicalDataTemplate应用的WPF TreeView中绑定SelectedItem

我有一个数据绑定TreeView,我想绑定SelectedItem.这种附加的行为工作完全没有HierarchicalDataTemplate,但与它连接的行为只能单向(UI数据)不是别的,因为现在e.NewValueMyViewModel不是TreeViewItem.

这是附加行为的代码段:

private static void OnSelectedItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
    var item = e.NewValue as TreeViewItem;
    if (item != null)
    {
        item.SetValue(TreeViewItem.IsSelectedProperty, true);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的TreeView定义:

<Window xmlns:interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
    <TreeView ItemsSource="{Binding MyItems}" VirtualizingStackPanel.IsVirtualizing="True">
        <interactivity:Interaction.Behaviors>
            <behaviors:TreeViewSelectedItemBindingBehavior SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
        </interactivity:Interaction.Behaviors>
        <TreeView.Resources>
            <HierarchicalDataTemplate DataType="{x:Type local:MyViewModel}" ItemsSource="{Binding Children}">
                <TextBlock Text="{Binding Name}"/>
            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>
</Window>
Run Code Online (Sandbox Code Playgroud)

如果我可以获得TreeView对附加行为方法的引用OnSelectedItemChanged,也许我可以使用此问题中的答案来获取TreeViewItem但我不知道如何到达那里.有谁知道如何以及它是正确的方式去?

data-binding wpf treeview hierarchicaldatatemplate treeviewitem

13
推荐指数
1
解决办法
9301
查看次数

WPF双击TreeviewItem子节点

我在树视图中有一个树视图项,它将有一个绑定到它的列表:

        <TreeViewItem Name="tviOffline" Foreground="Red" FontWeight="Bold"
                      Header="Offline">
            <TreeViewItem.ItemTemplate>
                <DataTemplate DataType="{x:Type local:Buddy}">
                    <StackPanel>
                        <TextBlock Text="{Binding Nick}" FontSize="10" Foreground="#8CFFD528" />
                    </StackPanel>
                </DataTemplate>
            </TreeViewItem.ItemTemplate>
        </TreeViewItem>
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何让每个孩子都有双击事件.

任何帮助表示赞赏.非常感谢.

wpf treeview double-click treeviewitem

10
推荐指数
3
解决办法
2万
查看次数

显示与行相关的树视图项?

有没有办法让我们展开时,树视图显示连接项目的线条?

谢谢!

c# wpf treeview treeviewitem

9
推荐指数
1
解决办法
9766
查看次数

如何根据条件阻止选择TreeViewItem

我有wpf TreeView - 绑定到一些数据.Treeview位于窗口的左侧,该窗口分为两个区域,其中树是导航,右侧的面板根据所选的树节点更改内容.

并非树视图的所有节点都生成详细信息.我想禁用这些节点的选择.任何的想法?

谢谢

wpf treeview xaml treeviewitem

9
推荐指数
2
解决办法
1万
查看次数

TreeViewItem上的KeyBinding

我有一个典型的树视图和视图模型.viewmodel有一个可观察的其他视图模型集合,用作树的数据源.

public class TreeViewVM {
    public ObservableCollection<ItemVM> Items { get; private set; }
    public ItemVM SelectedItem { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和ItemVM:

public class ItemVM {
    public string Name { get; set; }
    public ImageSource Image { get; private set; }
    public ObservableCollection<ItemVM> Children { get; private set; }
    public ICommand Rename { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

风景 :

<TreeView Selecteditem="{Binding SelectedItem}" ItemsSource="{Binding Items}">
    <TreeView.ItemTemplate>
         <HierarchicalDataTemplate>
             <StackPanel Orientation="Horizontal">
                 <StackPanel.InputBindings>
                     <KeyBinding Key="F2" Command="{Binding Rename}"/>
                 </StackPanel.InputBindings>
                 <Image Source="{Binding Image}"/>
                 <TextBlock Text="{Binding …
Run Code Online (Sandbox Code Playgroud)

wpf treeview key-bindings treeviewitem inputbinding

8
推荐指数
2
解决办法
5390
查看次数

如何确定是否通过鼠标或键选择?

我有一个MVVM应用程序,在窗口的左侧有一个WPF TreeView.右侧的详细信息面板根据所选的树节点更改内容.

如果用户选择节点,则详细信息面板的内容会立即更改.如果用户点击该节点,则需要这样做,但如果用户使用键向下/向上导航树,我想延迟更改内容.(与Windows资源管理器的行为相同,至少在Win XP下)我假设我必须在我的ViewModel中知道是否通过鼠标或键盘选择了节点.

我怎样才能做到这一点?

更新:

这是我的第一篇文章,因此我不确定这是不是正确的地方,但我想让社区知道我在此期间做了什么.这是我自己的解决方案.我不是专家,所以我不知道这是不是一个好的解决方案.但它适用于我,如果能帮助别人,我会很高兴.错误修正,改进或更好的解决方案非常受欢迎.

我创建了下面附加的属性HasMouseFocus ...
(首先我使用了MouseEnterEvent但是如果用户使用键向上/向下导航树并且鼠标指针随机遍布任何导航的树项目,这不能很好地工作,因为在这种情况下详细信息立即更新.)

public static bool GetHasMouseFocus(TreeViewItem treeViewItem)
{
  return (bool)treeViewItem.GetValue(HasMouseFocusProperty);
}

public static void SetHasMouseFocus(TreeViewItem treeViewItem, bool value)
{
  treeViewItem.SetValue(HasMouseFocusProperty, value);
}

public static readonly DependencyProperty HasMouseFocusProperty =
  DependencyProperty.RegisterAttached(
    "HasMouseFocus",
    typeof(bool),
    typeof(TreeViewItemProperties),
    new UIPropertyMetadata(false, OnHasMouseFocusChanged)
  );

static void OnHasMouseFocusChanged(
  DependencyObject depObj, DependencyPropertyChangedEventArgs e)
{
  TreeViewItem item = depObj as TreeViewItem;
  if (item == null)
    return;

  if (e.NewValue is bool == false)
    return;

  if ((bool)e.NewValue)
  {
    item.MouseDown += OnMouseDown;
    item.MouseLeave += OnMouseLeave; …
Run Code Online (Sandbox Code Playgroud)

c# wpf .net-4.0 mvvm treeviewitem

8
推荐指数
1
解决办法
620
查看次数