如何在select上选择TreeViewItem

时间:2012-07-26 10:47:34

标签: wpf

        <HierarchicalDataTemplate x:Key="SchemTemplate">
            <TextBlock Text="{Binding Path=path}" />
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate x:Key="SchemesTemplate">
            <TreeViewItem TextBlock.FontStyle="Italic" 
                          Header="{Binding name}" 
                          ItemsSource="{Binding schemes}"
                          ItemTemplate="{StaticResource SchemTemplate}" />
        </HierarchicalDataTemplate>

        <DataTemplate x:Key="ProjectTemplate">                
            <TreeView>
                <TreeViewItem Header="{Binding Path=name}"
                              ItemsSource="{Binding schemes}"
                              ItemTemplate="{StaticResource SchemesTemplate}">
                </TreeViewItem>
            </TreeView>            
        </DataTemplate>

使用:

        <ListBox Style="{StaticResource ListProjectsStyle}"                         
                 x:Name="projects" 
                 Grid.Row="0" Grid.Column="0"
                 ItemsSource="{Binding projects_models, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                 ItemTemplate="{StaticResource ProjectTemplate}"
                 SelectedItem="{Binding active_project, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
        </ListBox>

当我在TreeView上单击鼠标右键时,ListBox的SelectedItem发生了变化,但左键单击会执行此操作。左键单击将焦点放在TreeView上或展开TreeView项目。当焦点在TreeView上时,如何更改对ListBox的关注?

1 个答案:

答案 0 :(得分:0)

解决方案:

            <ListBox.Resources>
                <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource ListBoxItem}">
                    <EventSetter Event="ListBoxItem.PreviewMouseLeftButtonDown"
                                 Handler="ListBoxItem_Select" />
                </Style>
            </ListBox.Resources>


 private void ListBoxItem_Select(object sender, MouseEventArgs e)
    {
        var mouseOverItem = sender as ListBoxItem;
        if (mouseOverItem != null&& e.LeftButton == MouseButtonState.Pressed)
        {
            mouseOverItem.IsSelected = true;
        }
    }