C# 当Listbox悬停时,treeview中的Listbox不可滚动

C# 当Listbox悬停时,treeview中的Listbox不可滚动,c#,wpf,listbox,treeview,C#,Wpf,Listbox,Treeview,我正在尝试获取具有多个选择的TreeView。我必须以编程方式构建TreeView(我假设),因为我要从数据库中获取数据 我的问题是 该程序在情况A中按预期工作,我将树视图悬停在那里——我可以上下滚动。 但是,在情况B中,这是不可能的,我将鼠标悬停在列表框上 示例的XAML如下所示: <Window x:Class="WPF_test_1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/present

我正在尝试获取具有多个选择的
TreeView
。我必须以编程方式构建
TreeView
(我假设),因为我要从
数据库中获取数据

我的问题是

该程序在情况A中按预期工作,我将
树视图悬停在那里
——我可以上下滚动。 但是,在情况B中,这是不可能的,我将鼠标悬停在
列表框上

示例的XAML如下所示:

<Window x:Class="WPF_test_1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="150" Width="230">

    <Grid>
        <TreeView x:Name="treeView" Margin="10,10,10,9.8"/>
    </Grid>
</Window>

而C#:

使用System.Windows;
使用System.Windows.Controls;
命名空间WPF_测试_1
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
ListBox lb=新的ListBox();
lb.Items.添加(“长名称测试”);
lb.添加项目(“测试”);
lb.添加项目(“测试”);
lb.添加项目(“测试”);
lb.添加项目(“测试”);
lb.添加项目(“测试”);
lb.SelectionMode=SelectionMode.Extended;
lb.边界厚度=新厚度(0);
TreeViewItem lv=新的TreeViewItem();
lv.Header=“测试”;
lv.项目添加(磅);
treeView.Items.Add(lv);
}
}
}
我选择将
列表框
添加到
树状视图项目
,因为这样可以实现多重选择,而无需对
树状视图
进行扩展-但正如我所说,它不允许我正确滚动

有人知道解决方法吗,或者问题是什么


提前谢谢你。

现在我已经了解了真正的问题所在,我发现了

下面是一个纯粹的XAML快速示例,它在一组列表框上演示了该技术,这些列表框是
TreeViewItems
的子项

在纯代码隐藏中,生成模板有点麻烦。我建议用XAML创建样式,给它
x:Key=“NonScrollingListBoxStyle”
,并在代码隐藏中加载
FindResource(“NonScrollingListBoxStyle”)
。然后,您可以手动将其应用于每个
列表框
。在这里,我做了一个简单的,只是为了节省打字

<TreeView Height="120">
    <TreeView.Resources>
        <Style TargetType="ListBox" BasedOn="{StaticResource {x:Type ListBox}}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBox">
                        <ItemsPresenter />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TreeView.Resources>
    <TreeViewItem IsExpanded="True" Header="Item 1">
        <ListBox>
            <TextBlock>Item A</TextBlock>
            <TextBlock>Item B</TextBlock>
            <TextBlock>Item C</TextBlock>
            <TextBlock>Item D</TextBlock>
            <TextBlock>Item E</TextBlock>
        </ListBox>
    </TreeViewItem>
    <TreeViewItem IsExpanded="True" Header="Item 2">
        <ListBox>
            <TextBlock>Item A</TextBlock>
            <TextBlock>Item B</TextBlock>
            <TextBlock>Item C</TextBlock>
            <TextBlock>Item D</TextBlock>
            <TextBlock>Item E</TextBlock>
        </ListBox>
    </TreeViewItem>
    <TreeViewItem IsExpanded="True" Header="Item 3">
        <ListBox>
            <TextBlock>Item A</TextBlock>
            <TextBlock>Item B</TextBlock>
            <TextBlock>Item C</TextBlock>
            <TextBlock>Item D</TextBlock>
            <TextBlock>Item E</TextBlock>
        </ListBox>
    </TreeViewItem>
    <TreeViewItem IsExpanded="True" Header="Item 4">
        <ListBox>
            <TextBlock>Item A</TextBlock>
            <TextBlock>Item B</TextBlock>
            <TextBlock>Item C</TextBlock>
            <TextBlock>Item D</TextBlock>
            <TextBlock>Item E</TextBlock>
        </ListBox>
    </TreeViewItem>
</TreeView>

项目A
B项
项目C
项目D
项目E
项目A
B项
项目C
项目D
项目E
项目A
B项
项目C
项目D
项目E
项目A
B项
项目C
项目D
项目E

我在WPF方面还没有很多经验,因为这对我来说是一个学习项目。所以我不知道MVVM和XAML的可能性。即使我对我需要的列表框和树视图的数量一无所知,是否有可能避免“以编程方式”执行此操作?我检查了您的解决方案。它添加了一种嵌套的滚动条——这并不是真正想要的行为。是否有可能使列表框达到所需的高度,并且仍然滚动?就像您在文件资源管理器侧边栏中的滚动行为一样。您希望不使用滚动条进行滚动吗?我给了你你说你想要的。请给我一张你真正想要的图片。你可以在左边的菜单上看到滚动条。这就是我想要的滚动。如果不清楚的话,我很抱歉。什么都不清楚。你想要滚动,你不想要滚动。我不是禅师。祝你好运如果你能给我一个你真正想要的图像,我可以告诉你如何创建它。我不能做的是猜测你想在自己的UI中看到的Windows资源管理器屏幕截图是什么。我看到一个滚动条。但你不想要一个。好吧,随便吧。
<TreeView Height="120">
    <TreeView.Resources>
        <Style TargetType="ListBox" BasedOn="{StaticResource {x:Type ListBox}}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBox">
                        <ItemsPresenter />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TreeView.Resources>
    <TreeViewItem IsExpanded="True" Header="Item 1">
        <ListBox>
            <TextBlock>Item A</TextBlock>
            <TextBlock>Item B</TextBlock>
            <TextBlock>Item C</TextBlock>
            <TextBlock>Item D</TextBlock>
            <TextBlock>Item E</TextBlock>
        </ListBox>
    </TreeViewItem>
    <TreeViewItem IsExpanded="True" Header="Item 2">
        <ListBox>
            <TextBlock>Item A</TextBlock>
            <TextBlock>Item B</TextBlock>
            <TextBlock>Item C</TextBlock>
            <TextBlock>Item D</TextBlock>
            <TextBlock>Item E</TextBlock>
        </ListBox>
    </TreeViewItem>
    <TreeViewItem IsExpanded="True" Header="Item 3">
        <ListBox>
            <TextBlock>Item A</TextBlock>
            <TextBlock>Item B</TextBlock>
            <TextBlock>Item C</TextBlock>
            <TextBlock>Item D</TextBlock>
            <TextBlock>Item E</TextBlock>
        </ListBox>
    </TreeViewItem>
    <TreeViewItem IsExpanded="True" Header="Item 4">
        <ListBox>
            <TextBlock>Item A</TextBlock>
            <TextBlock>Item B</TextBlock>
            <TextBlock>Item C</TextBlock>
            <TextBlock>Item D</TextBlock>
            <TextBlock>Item E</TextBlock>
        </ListBox>
    </TreeViewItem>
</TreeView>