选择后更改 TreeViewItem 的前景

2023-12-04

在我的程序中我有一个TreeView用户将从中选择不同的项目。我的中有一些项目TreeView它们是在我的 C# 代码隐藏中创建时自定义的。

Like so:

public static TreeViewItem newItem = new TreeViewItem() //Child Node
{
       Header = new StackPanel //ICON
       {
           Orientation = Orientation.Horizontal,
           Children =
           {
               new Border {
                   Width = 12,
                   Height = 14,

                   Background = Brushes.Blue,
                   BorderThickness = new Thickness(1.0),
                   BorderBrush = Brushes.Black
              },
              new Label {
                  Content = "Node1"
              }
           }
      }
};

我希望这些商品显示为白色foregrounds当它们被选择时(就像默认节点行为一样)。

这是我迄今为止在 XAML 中尝试过的。这是我设置的样式模板TreeViewItems。我没有收到编译器错误,但由于某种原因,当我运行该程序时TreeView不可见。

<Style TargetType="{x:Type TreeViewItem}" >
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TreeViewItem}">
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="True" >
                                <Setter Property="Foreground" Value="White" />
                            </Trigger>
                            <Trigger Property="IsSelected" Value="False" >
                                <Setter Property="Foreground" Value="Black" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
</Style>

我该如何解决这个问题,以便我的所有TreeView节点显示白色foregrounds什么时候选择的?


这是因为您完全重写了模板,并且没有编写任何内容。只是设置触发器,不一定要在模板中执行,您可以将它们设置在Style。模板通常设置为更改可视化树中的元素。试试这个例子:

<Window.Resources>
    <Style TargetType="{x:Type TreeViewItem}">
        <Style.Resources>
            <!-- Set Highlight Background color -->
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Black" />
        </Style.Resources>

        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <!-- Set Foreground color -->
                <Setter Property="Foreground" Value="White" />
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<Grid>
    <TreeView>
        <TreeViewItem Header="Root">
            <TreeViewItem Header="Child1" />
            <TreeViewItem Header="Child2" />
            <TreeViewItem Header="Child3" />
            <TreeViewItem Header="Child4" />
        </TreeViewItem>
    </TreeView>
</Grid>

欲了解更多信息,请参阅:

MSDN 上的样式和模板

MSDN 上的 TreeView 样式/模板示例

EDIT

尝试这个:

public TreeViewItem newItem = new TreeViewItem() //Child Node
{
    Header = new StackPanel 
    {
        Orientation = Orientation.Horizontal,

        Children =
        {
            new Border 
            {
                Width = 12,
                Height = 14,

                Background = Brushes.Blue,
                BorderThickness = new Thickness(1.0),
                BorderBrush = Brushes.Black
            },

            new Label 
            {
                Content = "Node1",
                Foreground = Brushes.Black,
            }
        }
    }
};

private void AddItem_Click(object sender, RoutedEventArgs e)
{
    // Set Selected handler on Selected event
    newItem.Selected += new RoutedEventHandler(newItem_Selected);

    // Set Unselected handler on Unselected event
    newItem.Unselected += new RoutedEventHandler(newItem_Unselected);

    // Add your item
    MyTreeView.Items.Add(newItem);
}

// Set the black color for foreground
private void newItem_Unselected(object sender, RoutedEventArgs e) 
{
    TreeViewItem MyTreeViewItem = sender as TreeViewItem;
    StackPanel MyStackPanel = MyTreeViewItem.Header as StackPanel;
    Label MyLabel = MyStackPanel.Children[1] as Label;

    MyLabel.Foreground = Brushes.Black;
}

// Set the white color for foreground
private void newItem_Selected(object sender, RoutedEventArgs e)
{
    TreeViewItem MyTreeViewItem = sender as TreeViewItem;
    StackPanel MyStackPanel = MyTreeViewItem.Header as StackPanel;
    Label MyLabel = MyStackPanel.Children[1] as Label;

    MyLabel.Foreground = Brushes.White;         
}

Note:如果您使用模板,则可以缩短此代码并使其变得更容易TreeViewItem.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

选择后更改 TreeViewItem 的前景 的相关文章

随机推荐

  • Python 中 -m 开关是哪个单词的快捷方式? [复制]

    这个问题在这里已经有答案了 创建虚拟环境时 我运行 python3 m venv env 我明白那个 m 执行一个模块 venv在这种情况下 我也知道只有当你有 main py文件在你的模块中 那么 捷径是什么呢 m实际上代表什么 Is i
  • python3 和请求:仍然收到“sslv3 警报握手失败”

    我一直在尝试使用Python 3执行HTTPS请求requests并汇总了 StackOverflow 上记录的之前尝试中的几乎所有知识 我似乎一生都无法摆脱sslv3 alert handshake failure兔子洞 这是我的环境 m
  • 内核 qdiscs 模块中的网络数据包缓冲

    我想缓冲源自容器网络接口的输出数据包 这个netlink库文件名为sch plug chttps code woboq org linux linux net sched sch plug c html看起来可以解决问题 但我发现它很难使用
  • 使用curl点击javascript按钮

    我已经使用curl解析了一个页面 它包含一些复选框和一个 全选 和一个 提交 按钮 单击该按钮会选择每个复选框 全选 按钮会触发一个 javascript 函数 该函数实际上会选择所有复选框 现在我需要单击 全选 和 提交 按钮 我该怎么做
  • 防止 iframe 在刷新时加载“src”页面

    我正在创建一个静态网站并使用 iframe 问题是 当我导航到另一个页面时 例如 iframe 的以下代码 The src属性指向 aboutsus1 php 现在 当我导航到另一个页面时 例如 我转到 aboutus2 php 然后重新加
  • “void”作为方法的返回类型意味着什么? [复制]

    这个问题在这里已经有答案了 我对 空 感到困惑 因为它涉及方法 我不知道当一种方法具有 void 而另一种方法没有时 两种方法之间的区别是什么 例如 如果我这样做 Public meth int amount amount initial
  • 在java中加载精灵图像

    我想问一下为什么在将任何精灵图像加载到对象中时出错 这是我获取图像的方法 import java awt image BufferedImage import java io IOException public class SpriteS
  • 如何正确使用 allContactedBodies?

    我想使用 allContactedBodies 而不是 didBeginContact 和 didEndContact 当我做 NSLog node physicsBody allContactedBodies 与物体发生正确的接触 我得到
  • 如何简化javascript程序?

    我很想最小化该程序 也许将 p1 16 放在一行代码中 与 count 和 gefunden 相同 由于我的语言能力很差 我找不到正确的信息 如果有一种方法可以最大限度地减少搜索命中 pdf 中的 if else 语句 那就太好了 现在 我
  • 如何使用 ImageFormatConverter.ConvertFromString 将包含 HTML 响应的字符串转换为图像?

    这就是我所取得的成就 在页面加载中 panelmain Controls Add abc panelmain Controls Add grid1 string toexport toexport RenderControl panelma
  • 验证网络凭据以访问客户端对象模型上的 SharePoint 网站

    我正在开发小型应用程序 需要将给定网站的所有组中的所有用户都吸引过来 我有两个网站 SharePoint 2010 在本地运行 SharePoint 2013 在线运行 我收到凭据错误 The remote server returned
  • 用 gfortran 编译的神秘关联行为

    我有以下简短的 Fortran 代码 MODULE PREC INTEGER PARAMETER q 8 END MODULE PREC MODULE MOD FIT USE prec q TYPE spec INTEGER HL HR C
  • 将子存储库内容推送到一起(不使用 git 子模块)

    在主存储库中 还有另一个存储库 可能是从 github 下载的 我将其称为子存储库 我不想使用 git 子模块功能 子存储库最终可能会被提交并推送到他自己的遥控器上 但我想在主存储库中继续工作 忽略该文件夹 子存储库 实际上是一个 git
  • 是否可以在 eclipse indigo 中使用 tomcat 7.0.20?

    在安装新的 eclipse indigo IDE 时 我尝试设置之前从 Apache 网站 tomcat 7 0 20 下载的 tomcat 服务器 但没有成功 当我在表单中填写 tomcat 目录时 会出现错误 提示我选择的版本无效 它还
  • SilverStripe - 限制数据对象可以拥有的多个关系的数量

    如果我有一个 has many我想与之管理的关系GridField在 cms 中 我将如何限制一个对象可以拥有的关系数量 这可能吗 我可以在模型中执行此操作吗 还是必须将其添加到GridField我正在使用添加和删除关系 我正在考虑实施Gr
  • Amazon SES - 统计发送的电子邮件统计数据

    我使用 SES 发送电子邮件 我在 Amazon SES 服务下有超过 10 个经过验证的域 但我的问题是 我没有每个电子邮件地址或域的任何统计信息 AWS 控制台将所有发送 退回等组合在一起 那么我怎样才能知道从我的某个域发出了多少封电子
  • matlab CUDA 内核中二维数组的操作

    假设我有以下序列号C int add int a int b int n for i 0 i
  • 淘汰赛日期在发布到 MVC 控制器时重置

    我有一个淘汰赛 mvc3 应用程序 我正在将日期传递回控制器 控制器 public ActionResult PackageUpdate Package updatePackage do some stuff but dates are s
  • 并排放置 2 个 svg

    我可以在 d3 js 的一个屏幕上使用 2 个 svg 代码看起来像这样并且效果很好
  • 选择后更改 TreeViewItem 的前景

    在我的程序中我有一个TreeView用户将从中选择不同的项目 我的中有一些项目TreeView它们是在我的 C 代码隐藏中创建时自定义的 Like so public static TreeViewItem newItem new Tree