我必须将多选树视图集成到现有的wpf应用程序(.NET 3.5)中。由于此功能尚未开箱即用,我已经下载了TreeViewEx,它可以满足我的需求(在对.NET 3.5进行一些改编之后)。
像这样配置的示例应用程序
<Window
x:Class="W7StyleSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="clr-namespace:System.Windows.Controls;assembly=TreeViewEx"
xmlns:Model="clr-namespace:W7StyleSample.Model"
Title="MainWindow" Height="350" Width="261"
AutomationProperties.Name="TestApp2Window" >
<Window.Resources>
<Style TargetType="Controls:TreeViewExItem">
<Setter Property="IsExpanded" Value="{Binding IsExpandedValue}"/>
</Style>
</Window.Resources>
<DockPanel>
<Controls:TreeViewEx x:Name="tree"
AutomationProperties.Name="TestApp2Tree"
ItemsSource="{Binding Children}">
<Controls:TreeViewEx.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="{x:Type Model:Node}">
<TextBlock Text="{Binding}"/>
</HierarchicalDataTemplate>
</Controls:TreeViewEx.ItemTemplate>
</Controls:TreeViewEx>
</DockPanel>
</Window>
运行时看起来像这样:
这正是我想要的前景,背景,项目突出显示,选择等。
当我将它集成到我的应用程序中时:
<controls:TreeViewEx Name="m_tvLeft"
ItemsSource="{Binding Source={StaticResource LeftGridSource}}"
SelectionChanged="OnTvLeftSelectionChanged"
MouseDoubleClick="OnTvLeftItemMouseDoubleClick" />
看起来像这样:
行高太大,突出显示颜色不符合要求,可扩展节点无法扩展。
问题:如何将此组件设置为与演示应用程序中的相同?
我没有WPF向导,但猜测这与样式继承有关。在做了一些研究之后,我还没有找到这种造型的来源,也没有办法按要求覆盖它。
某些解决方案尝试:
将样式应用于:
<controls:TreeViewEx Name="m_tvLeft"
ItemsSource="{Binding Source={StaticResource LeftGridSource}}"
SelectionChanged="OnTvLeftSelectionChanged"
MouseDoubleClick="OnTvLeftItemMouseDoubleClick">
<controls:TreeViewEx.Resources>
<Style TargetType="controls:TreeViewExItem">
<Setter Property="Margin" Value="0"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="FontSize" Value="10"/>
</Style>
</controls:TreeViewEx.Resources>
</controls:TreeViewEx>
这样,字体大小正确应用,但两个树节点之间的边距不会减小。
<controls:TreeViewEx Name="m_tvLeft"
ItemsSource="{Binding Source={StaticResource LeftGridSource}}"
SelectionChanged="OnTvLeftSelectionChanged"
MouseDoubleClick="OnTvLeftItemMouseDoubleClick">
<controls:TreeViewEx.Resources>
<Style TargetType="controls:TreeViewExItem" BaseOn="{x:Null}"/>
</controls:TreeViewEx.Resources>
</controls:TreeViewEx>
我无法使用这种风格看到任何效果。