我有一些TreeView的同步实例..
它工作得很好,我将一些属性绑定到ViewModel。
<Style x:Key="FlattenedTreeViewItem" TargetType="{x:Type TreeViewItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="IsExpanded" Value="{Binding IsExpanded}" />
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
由于某种原因,我决定覆盖TreeViewItem的模板。
上面已删除的属性绑定
我想要做的就是将默认选择带回TreeViewItem,但似乎没有任何效果。 我尝试在IsSelected上使用简单的Trigger并设置border / background / foreground ..没有任何显示任何更改。
我已经用Google搜索了,到目前为止我发现的任何内容都是XAML的一页,只是为了设置选择的风格? 有没有一种简单的方法将它带回模板?
同样适用于IsExapnded, 我必须使用这个:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ExpansionStates">
<VisualState x:Name="Expanded">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="ItemsHost">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Collapsed" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
似乎过分,但至少这个有效。
选择后,我无法使用简单的触发器让它工作..我不能完全带来选择的风格,我不想带来一些巨大的丑陋的xaml。
这是我的完整模板:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TreeViewItem">
<StackPanel>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ExpansionStates">
<VisualState x:Name="Expanded">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="ItemsHost">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Collapsed" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ContentPresenter ContentSource="Header" />
<ItemsPresenter Name="ItemsHost" Visibility="Collapsed" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
答案 0 :(得分:2)
模板是“XAML的巨大丑陋”,这就是现实,你无能为力。
答案 1 :(得分:1)
最短路径(并不是那么漂亮):用StackPanel
包裹带有边框的Trigger
并在<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TreeViewItem">
<Border x:Name="Bd" Background="Transparent">
<StackPanel>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ExpansionStates">
<VisualState x:Name="Expanded">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="ItemsHost">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Collapsed" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ContentPresenter ContentSource="Header" />
<ItemsPresenter Name="ItemsHost" Visibility="Collapsed" />
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Bd" Property="Background" Value="HotPink"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
中更改其背景。
XAML:
ToggleButton
注意: - 将“HotPink”更改为所需的颜色
注意2: - 对于TreeViewItem功能,您最好添加<ToggleButton IsChecked="{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"/>
,以允许用户展开\折叠项目。它的最小工作(在stackPanel中的某个地方):
TabItem
P.S。 - 等到你在Luna主题中看到{{1}}的模板....
答案 2 :(得分:0)
要清理您的网页,您可以使用全局“合并资源字典”,并将模板填入其中。