我想以编程方式(在代码/不是 xaml 中)为每个“TreeViewItem”样式分配一个新的 DataTrigger,就像我在下面的 xaml 中所做的那样。
我做了一些代码(在 xaml 下),在其中定义了我的触发器,但“ItemContainerStyle”为空。该函数在 Window Initialize 事件上调用。
有人知道我在做什么错吗?
编辑
我发现了我的问题的一部分:我将我的样式从“资源”部分移动到“ItemContainerStyle”部分,如下面的代码示例中定义。这种方式仍然应用样式,我可以从代码中的 TReeView.ItemContainerStyle 属性访问样式。但我仍然不知道如何通过代码获取 TreeViewItem 选择的样式,如背景颜色?
我有 xaml:
<TreeView Name="TreeViewSelectScopeStudy" MinHeight="24" Margin="7"
ItemsSource="{Binding Path=TvItemRootPssTreeViewRoot.ChildsView}" Height="Auto"
VerticalAlignment="Stretch"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<TreeView.Resources>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding Path=IsExpanded}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsHilighted}" Value="true">
<!--<Setter Property="Background" Value="SlateBlue"></Setter>-->
<Setter Property="Background" Value="{StaticResource {x:Static SystemColors.HighlightBrushKey}}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
我有那个代码:
public static void EnableMultipleSelection(TreeView treeView)
{
if (!_isMultiSelectTreeViewLeftButtonHandlerRegistered)
{
EventManager.RegisterClassHandler(typeof(TreeViewItem), UIElement.MouseDownEvent,
new MouseButtonEventHandler(TreeViewMouseDownGlobal));
_isMultiSelectTreeViewLeftButtonHandlerRegistered = true;
}
DataTrigger dataTrigger = new DataTrigger();
dataTrigger.Binding = new Binding("IsHilighted");
dataTrigger.Value = true;
dataTrigger.Setters.Add(new Setter(TreeViewItem.BackgroundProperty, new SolidColorBrush(Colors.Brown)));
treeView.ItemContainerStyle.Triggers.Add(dataTrigger);
编辑代码:
<TreeView Name="TreeViewSelectScopeStudy" MinHeight="24" Margin="7"
ItemsSource="{Binding Path=TvItemRootPssTreeViewRoot.ChildsView}" Height="Auto"
VerticalAlignment="Stretch"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding Path=IsExpanded}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsHilighted}" Value="true">
<Setter Property="Background" Value="{StaticResource {x:Static SystemColors.HighlightBrushKey}}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.Resources>
<!--<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding Path=IsExpanded}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsHilighted}" Value="true">
<Setter Property="Background" Value="{StaticResource {x:Static SystemColors.HighlightBrushKey}}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>-->