WPF 树视图蓝调。我想选择一个项目

2023-12-29

我正在尝试选择一个 TreeViewItem。现在,我可以访问包含的 TreeViewItem 并告诉它展开,以便我可以选择它的孩子。如果它已经展开,一切都很好,如果没有,那么我运行以下代码:

EventHandler selector = new EventHandler(delegate
    {
        if (selectedDirectoryTreeItem.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
        {
            TreeViewItem want = selectedDirectoryTreeItem.ItemContainerGenerator.ContainerFromItem(dirWeWantSelected) as TreeViewItem;
            if (want == null)
                return;

                want.IsSelected = true;
            // selectedDirectoryTreeItem.ItemContainerGenerator.StatusChanged -= selector;
        }
    });
selectedDirectoryTreeItem.ItemContainerGenerator.StatusChanged += selector;  

所以我的问题是,为什么它不选择?想要永远为空。我正在互联网上寻找另一种方法来做到这一点,但如果有人能向我解释这一点那就太酷了


我个人总是发现将 Selected 属性粘贴到模型对象中,然后将 TreeViewItem Selected 属性绑定到模型的 Selected 属性是最简单的方法。这是一些代码:

Model

public class Data : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public Data()
    {
        DataItems = new List<Data>();
    }

    public string Name { get; set; }

    private bool _selected;
    public bool Selected
    {
        get { return _selected; }
        set
        {
            _selected = value;
            OnPropertyChanged("Selected");
        }
    }

    public List<Data> DataItems { get; set; }

    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

XAML

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1"
    xmlns:controls="clr-namespace:MyControls;assembly=MyControls"
    Title="Window1">  
    <Window.Resources>
        <Style x:Key="CustomTreeViewItem" TargetType="TreeViewItem">
            <Setter Property="IsSelected" Value="{Binding Path=Selected, Mode=TwoWay}" />
            <Setter Property="IsExpanded" Value="True" />
        </Style>
    </Window.Resources>
    <DockPanel Background="Transparent">   
        <TreeView x:Name="_tvTest" DockPanel.Dock="Left" ItemContainerStyle="{StaticResource CustomTreeViewItem}" Width="300" >
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate DataType="{x:Type local:Data}" ItemsSource="{Binding DataItems}">
                    <TextBlock Text="{Binding Name}" Padding="2" />
                    <HierarchicalDataTemplate.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Name}" Padding="2" />
                        </DataTemplate>
                    </HierarchicalDataTemplate.ItemTemplate>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>

        <Button Content="Select Random TreeView Item" Click="Button_Click" Height="50" Width="200" />
    </DockPanel>
</Window>

代码隐藏

public partial class Window1 : Window
{
    private Random _random;
    private List<Data> _dataItems;

    public Window1()
    {
        InitializeComponent();
        _dataItems = Init();
        _tvTest.ItemsSource = _dataItems;
        _random = new Random(5);
    }

    private List<Data> Init()
    {
        List<Data> dataItems = new List<Data>();
        for (int i = 1; i <= 10; i++)
        {
            Data d1 = new Data();
            d1.Name = "Data:" + i.ToString();
            for (int j = 1; j <= 4; j++)
            {
                Data d2 = new Data();
                d2.Name = "Data:" + i.ToString() + j.ToString();
                d1.DataItems.Add(d2);
            }
            dataItems.Add(d1);
        }
        return dataItems;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        int index = _random.Next(0, 9);
        int subIndex = _random.Next(0, 3);

        if (subIndex == 0)
            _dataItems[index].Selected = true;
        else
            _dataItems[index].DataItems[subIndex - 1].Selected = true;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 树视图蓝调。我想选择一个项目 的相关文章

  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • 按成员序列化

    我已经实现了template
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 重载<<的返回值

    include
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co

随机推荐

  • Composer 未安装本地包依赖项

    在我的 Laravel 5 4composer json 文件中 我有以下内容可以自动加载我的自定义包 请注意 该包尚未发布 而是在本地加载 autoload classmap database seeds database factori
  • 如何确定导致分段错误的原因

    我的代码的目标是接受 2 个命令行参数 包括程序名称 并根据给定的第二个命令行参数打印出所示的响应 如果命令行参数是一个整数 则用户的输入被接受或 成功 如果它是其他任何内容 例如字符串或多个命令行参数 则它将为 Null 并显示错误消息
  • 当光标位于页面之外时可以触发鼠标事件吗?

    我正在创建一个游戏 在该游戏中 人们可以按住鼠标按钮并拖动它来旋转对象 但是 当鼠标位置超出页面边界时 将不再触发所有鼠标事件 这意味着当光标位于页面之外时 对象不再旋转 此外 当用户在页面边界之外释放鼠标时 我无法跟踪这意味着当光标返回页
  • 如何使用 AngularJs 调整 SVG viewBox 的大小?

    类似问题的解决方案涉及 CSS 和img tag 但是 我无法使用 img src myFile svg 因为 SVG 包含 Angular 指令 例如
  • ncurses 捕获扩展键(Control-left、Shift-Function 等)

    我试图在我的 ruby 程序中捕获 Control Left Shift F10 等 通常 仅使用 getch 我会得到一个有效的整数列表 例如 27 91 50 50 126 但我担心这些可能取决于系统或终端 经过谷歌搜索后 我发现了 u
  • 为什么Java的String.getBytes()使用“ISO-8859-1”

    来自 java lang StringCoding String csn charsetName null ISO 8859 1 charsetName 这是 Linux jdk 7 中 Java lang getBytes 使用的内容 我
  • Android - 检查设备是否连接到互联网

    有没有简单的方法 如何检查设备是否主动连接到互联网 通过 GPRS EDGE UMTS HSDPA 或 Wi Fi 连接 Thanks 是的 我使用 isReachable public class Extras public static
  • 仿真期间的 Modelica 输出文件

    我进行了很长时间的模拟 并且需要在模拟继续时检查输出 另一个原因是我正在进行实时模拟 所以我也想实时查看输出 如果 OpenModelica 在模拟过程中创建一个输出文件 以便我可以使用第 3 方工具 也许是 Python 读取并绘制它 那
  • 什么是定点整数?

    In http microformats org wiki hreview aggregate http microformats org wiki hreview aggregate it says rating 必需的 定点整数 1 0
  • ggplot2 中的条形图

    有人会帮助使用绘制条形图吗ggplot2对于此数据 我无法为此数据开发条形图 在 ggplot 中 您应该使数据采用更长的格式 为此你可以使用pivot longer from tidyr 这样你就可以创建一个像这样的堆积条形图 df lt
  • SQL Server 2008 - 当列为空时设置一个值

    我正在 SQL Server 2008 数据库上执行 SELECT 语句 SELECT Name DOB Address1 Address2 City State Zip FROM Users 但是 如果上述任何列对于特定行恰好为空 我想将
  • 刺尾没有优雅地退出

    我正在使用以下任一命令通过 Maven 运行 Thorntail 2 2 1 Final 微服务 mvn thorntail start mvn thorntail run 它运行良好 但是当我击中时Ctrl C它不会退出应用程序 即控制台
  • 循环遍历 xml 元素

    我有以下内容 aMyArray null xml userfile Get Content C AppSense Scripts AmPolicyConversion AM dev xml i 0 FOREACH j in userfile
  • numpy.ndarray 与 pandas.DataFrame

    我需要对程序中保存统计数据帧的数据结构基础的选择做出战略决策 我在一张大表中存储了数十万条记录 每个字段都有不同的类型 包括短字符串 我会对需要快速实时完成的数据进行多重回归分析和操作 我还需要使用一些相对流行且支持良好的东西 我知道以下参
  • 如何从通过 API 返回的 Task 获取值以进行单元测试

    我使用 ASP NET MVC Core v2 1 创建了一个 API 我的一个HttpGet方法设置如下 public async Task
  • MySQL按出现次数排序

    我正在两个名为的文本字段中进行搜索Subject and Text对于特定的关键字 为此 我使用LIKE陈述 我在尝试按出现次数对结果进行排序时遇到了问题 我的搜索查询如下所示 SELECT FROM Table WHERE Text LI
  • 在 Gnuplot 中,如何在第三列等于 0 时使点为一种颜色,否则为另一种颜色?

    我需要根据一列中的颜色改变一行值的点颜色 数据 x y z 1 3 0 1 5 6 3 5 2 4 5 0 如果该列为零 则颜色应为一个值 如果第三列中的值非零 则颜色应为不同的颜色 所以 我假设 plot file dat u 1 2 3
  • 在 Linux 中删除文件名中的空格[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在不同的文件夹中有数百个 jpg 文件 如下所示 304775 105 01 jpg 304775 105 03 jpg 304775 105 05
  • DUAL 的魔力

    正常情况下 不使用SYS或者也许使用它 SQL gt select from dual D X 在不太正常的条件下 连接为SYS SQL gt alter database close Statement processed SQL gt
  • WPF 树视图蓝调。我想选择一个项目

    我正在尝试选择一个 TreeViewItem 现在 我可以访问包含的 TreeViewItem 并告诉它展开 以便我可以选择它的孩子 如果它已经展开 一切都很好 如果没有 那么我运行以下代码 EventHandler selector ne