我似乎无法将Header绑定到我创建的这个树视图的样式 我有点像这个控制的垃圾风格大声笑。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="12*" MaxWidth="400"/>
<ColumnDefinition Width="13*"/>
</Grid.ColumnDefinitions>
<TreeView Name="WizardMenu" Visibility="Collapsed">
<TreeViewItem Name="treeViewItem" IsExpanded="True"
Header="Hardware Information"
HeaderTemplate="{StaticResource WizardsMenuItem}"
>
</TreeViewItem>
<TreeViewItem Name="treeViewItem1" IsExpanded="True"
Header="Hardware Information"
HeaderTemplate="{StaticResource WizardsMenuItem}"
>
</TreeViewItem>
<TreeViewItem Name="treeViewItem2" IsExpanded="True"
Header="Hardware Information"
HeaderTemplate="{StaticResource WizardsMenuItem}"
>
</TreeViewItem>
</TreeView>
创建节点的代码
为节点设置样式的代码
<HierarchicalDataTemplate x:Key="WizardsMenuItem" >
<TreeViewItem ClipToBounds="True">
<TreeViewItem.HeaderTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding RelativeSource={RelativeSource AncestorType=TreeViewItem}, Path=IsExpanded}">
<CheckBox.Template>
<ControlTemplate>
<DockPanel MaxWidth="365">
<Border Margin="5" Height="80" BorderBrush="Black" BorderThickness="1" CornerRadius="5" >
<DockPanel>
<DockPanel>
<DockPanel Name="IconArea" DockPanel.Dock="Right">
<Border Margin="4" Width="80" BorderBrush="Black" BorderThickness="1" CornerRadius="5" DockPanel.Dock="Right">
<Image />
</Border>
</DockPanel>
<DockPanel Name="TextArea" DockPanel.Dock="Left">
<TextBlock Text="{Binding}" Foreground="Black" DockPanel.Dock="Top" Margin="3,10,3,10" FontSize="18" FontWeight="Bold" FontFamily="Tahoma" />
<TextBlock Text="Basic Hardware, Disk Drive Space, Memory Size, Memory Allocation"
DockPanel.Dock="Top"
Margin="13,0,0,0"
FontFamily="Verdana" FontSize="9"
TextWrapping="Wrap" />
</DockPanel>
</DockPanel>
</DockPanel>
</Border>
</DockPanel>
</ControlTemplate>
</CheckBox.Template>
</CheckBox>
</DataTemplate>
</TreeViewItem.HeaderTemplate>
<TreeViewItem>
<TreeViewItem.HeaderTemplate>
<DataTemplate>
<Border Margin="30,0,5,0" BorderBrush="Black" BorderThickness="1" CornerRadius="5" >
<DockPanel>
<Button DockPanel.Dock="Top" Margin="5,2,5,2" Content="Predefined Reports" Background="Transparent" BorderBrush="Transparent" />
<Button DockPanel.Dock="Top" Margin="5,2,5,2" Content="Favorites Reports" Background="Transparent" BorderBrush="Transparent" />
<Button DockPanel.Dock="Top" Margin="5,2,5,2" Content="Customize Reports" Background="Transparent" BorderBrush="Transparent" />
</DockPanel>
</Border>
</DataTemplate>
</TreeViewItem.HeaderTemplate>
</TreeViewItem>
</TreeViewItem>
</HierarchicalDataTemplate>
除了这一点,一切正常
<TextBlock Text="{Binding}" Foreground="Black" DockPanel.Dock="Top" Margin="3,10,3,10"
FontSize="18" FontWeight="Bold" FontFamily="Tahoma" />
我希望有人可以帮助我
提前谢谢你:)
答案 0 :(得分:1)
问题是你的'文本框'没有DataContext,所以'{Binding}' - 什么都不返回
我想你想将它绑定到TreeViewItem(硬件信息)中的header属性
最简单的选择是将文本框绑定到它的相对安慰程序 - TreeViewItem的标题
{Binding RelativeSource={RelativeSource AncestorType=TreeViewItem}, Path=Header}
但是它会绑定到最近的anchestor,它位于你的模板中(在HierarchicalDataTemplate里面你有另一个TreeViewItem) 然后你还必须以同样的方式将他的'Header'绑定到它的父级
<TreeViewItem ClipToBounds="True" Header="{Binding RelativeSource={RelativeSource AncestorType=TreeViewItem}, Path=Header}">
那将有效
但是 - 这里最简单的方法不是最好的(也可能不是) 我不明白你为什么使用HeaderTemplate和HierarchicalDataTemplate。 我认为你应该在ControlTemplate中替换TreeViewItem.Template,在那里你将替换整个TreeViewItem,而不仅仅是它的标题。 但也许你有另一个计划,所以第一个解决方案也可以。