有XAML绑定的问题

时间:2014-01-19 10:06:52

标签: c# wpf xaml

我似乎无法将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" />

我希望有人可以帮助我

提前谢谢你:)

1 个答案:

答案 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,而不仅仅是它的标题。 但也许你有另一个计划,所以第一个解决方案也可以。