- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的程序中,我有一个 TreeView
,用户可以从中选择不同的项目。我的 TreeView
中有一些项目是在我的 c# 代码隐藏中创建时自定义的。
像这样:
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"
}
}
}
};
我希望这些项目在被选中时显示白色前景
(就像默认节点行为一样)。
这是我迄今为止在 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>
更多信息,请查看:
Styling and Templating on MSDN
Example of TreeView Style/Template on MSDN
编辑
试试这个:
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;
}
注意:
如果您为 TreeViewItem
使用模板,则可以缩短此代码并使其更容易。
关于c# - 选择后更改 TreeViewItem 的前景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18320842/
C#: TreeViewItem treeItem = null; treeItem = new TreeViewItem(); treeItem.Header = "
我有 webservice asmx,还有类: Country public string Name {get;set;} public string Code {get;set;} public L
我有一个Silverlight树 View ,该树 View 动态填充有treeviewitems(代表 View )。我的工作正常,但是当我单击Treeviewitem时说“ View 2.01”时
我使用最新版本的 mvvm light 工具包,但是我不清楚如何将 EventToCommand 用于事件 TreeViewItem.Expanded。 这很有效......我做错了什么?
当 TreeView(或应用程序)失去焦点时,如何更改所选 TreeViewItem 的背景。在这种情况下,默认情况下选定的项目具有浅灰色背景。 编辑:第一个答案后的尝试:但是找不到带有 Target
我希望能够通过右键单击在我的程序中选择一个 TreeViewItem。以前,(在 this question 中)我试图通过从任何我想允许选择 TreeViewItem 的地方调用 SetSelect
我是 WPF 表单的新手,在尝试在 TreeViewItem 中设置背景时遇到了一个问题。
我被要求更新 WPF 应用程序中的 TreeVeiw,该应用程序是从类对象动态构建的。正如您将看到的,treeveiw 不受任何约束。以下不是我的代码!! private void Buil
目前这是我的控件: 它应该在 ListBox 中,但问题是我需要能够仅选择父项或子项。 这是一个简单的概念,但我已经尝试了很多(包装在 ListBoxItem 中。使用扩展器并手动更改可
我希望能够从 TreeViewItem 中删除子节点通过按键盘上的删除按钮。我正在使用 SelectedItem尝试这样做。 目前我正在使用 KeyDown我的代码隐藏中的事件: private vo
private void SetCurrentItemInEditMode(bool EditMode) { if (product_tree.SelectedItem is Tre
你好,我正在使用一个 WPF 应用程序,我希望在展开 TreeView 上的项目之前触发事件。我知道目前还没有为此举办的事件,但我不确定如何以我这样做的方式添加一个事件,因此我们将不胜感激。 这是 x
我有一个 TreeView,我从一个集合中填充了一个 TreeViewItem 列表(使用绑定(bind)),我链接到一个 TreeView 事件“展开”以展开它并显示他们的 child ,我现在的目
您好问题是我有多个 TreeView 控件,每个 TreeView 都有自己的 TreeViewItem 样式,设置它 TreeView ItemContainerStyle="{StaticReso
我正在尝试创建一个向右水平扩展的 TreeView ,以便它像这样扩展: Parent1 -> Child1 Child2 Child3
为了在 TreeViewItem 中存储一个对象(比如一个类的实例),我目前将该对象存储在 TreeViewItem 中。的 Header然后覆盖 ToString该类的方法,以便它显示正确的字符串标
在我的 MVVM 应用程序中,我有一个树 View ,应该在选择时将树 View 项带入 View 。树 View 表示数据库中的记录。每个树 View 项通过在选择时展开项来按需加载其子项。 树 V
我有一个典型的 TreeView 和一个 View 模型。 View 模型有一个可观察的其他 View 模型集合,用作树的数据源。 public class TreeViewVM { publ
我有一个 TreeView我正在尝试实现一种样式,允许我使用 HierarchicalDataTemplate 在特定节点的所有子节点周围放置边框.我想要的一个例子如下所示: 以下代码是我到目前为止所
我在 TreeView 中有一个 TreeView 项目,它将绑定(bind)一个列表:
我是一名优秀的程序员,十分优秀!