【问题标题】:Listbox inside treeview is not scrollable when listbox is hovered当列表框悬停时,树视图内的列表框不可滚动
【发布时间】:2017-07-12 13:16:27
【问题描述】:

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

我的问题是 shown here as I can't embed pictures yet.

程序在情况 A 中按预期工作,我将鼠标悬停在 TreeView 上 - 我可以上下滚动。 然而,在情况 B 中这是不可能的,我将鼠标悬停在 ListBox 上。

示例的 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#:

using System.Windows;
using System.Windows.Controls;

namespace WPF_test_1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            ListBox lb = new ListBox();
            lb.Items.Add("Test with a long name");
            lb.Items.Add("Test");
            lb.Items.Add("Test");
            lb.Items.Add("Test");
            lb.Items.Add("Test");
            lb.Items.Add("Test");

            lb.SelectionMode = SelectionMode.Extended;
            lb.BorderThickness = new Thickness(0);

            TreeViewItem lv = new TreeViewItem();
            lv.Header = "TEST";
            lv.Items.Add(lb);
            treeView.Items.Add(lv);
        }
    }
}

我选择将ListBox 添加到TreeViewItem,因为这样可以启用多项选择,而无需对TreeView 实施扩展 - 但正如我所说,它不允许我正确滚动。

有谁知道解决方法,或者问题可能是什么?

提前谢谢你。

【问题讨论】:

    标签: c# wpf listbox treeview


    【解决方案1】:

    现在我已经从我的脑海中弄清楚了真正的问题是什么,我找到了a way to disable scrolling on a ListBox

    这是一个纯 XAML 快速入门,在一组列表框上演示了该技术,作为 TreeViewItems 的子项。

    在纯代码隐藏中,生成模板有点麻烦。我建议在 XAML 中创建样式,给它x:Key="NonScrollingListBoxStyle",然后在你的代码隐藏中用FindResource("NonScrollingListBoxStyle") 加载它。然后您可以手动将其应用于每个ListBox。在这里,我将其设为implicit style,只是为了节省输入。

    <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>
    

    【讨论】:

    • 我在 WPF 方面还没有很多经验,因为这对我来说是一个学习项目。所以我不知道 MVVM 和 XAML 的可能性。是否有可能避免“以编程方式”执行此操作 - 即使我对所需的 ListBox 和 TreeView 的数量一无所知?
    • 我检查了您的解决方案。它添加了一种嵌套滚动条——这并不是真正的预期行为。是否有可能使 ListBox 尽可能高,并且仍然滚动?就像文件资源管理器侧边栏中的滚动行为一样。
    • 您想在没有滚动条的情况下滚动吗?我给了你你说你想要的。请给我一张你真正想要的图片。
    • this picture的左侧菜单中可以看到滚动。这就是我想要的滚动。如果不清楚,我很抱歉。
    • 什么都不清楚。你想要滚动,你不想滚动。我不是禅师。祝你好运。如果您可以向我展示您真正想要的图像,我可以向您展示如何创建它。我不能做的是猜测您想在自己的 UI 中看到的 Windows 资源管理器屏幕截图是什么。我看到一个滚动条。但你不想要一个。好吧,随便。
    猜你喜欢
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    相关资源
    最近更新 更多