gpt4 book ai didi

c# - 选择后更改 TreeViewItem 的前景

转载 作者:行者123 更新时间:2023-11-30 17:03:43 25 4
gpt4 key购买 nike

在我的程序中,我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com