WPF TreeView ItemTemplate相关

时间:2016-05-25 09:42:21

标签: wpf header treeview

我使用标准的wpf控件

创建了自己的树视图,其中包含多列标题
  • 停靠面板
  • DataGrid,用于创建列并具有排序和调整大小功能。 datagrid的高度只有25,我们只需要在这里显示列而不是数据。
  • 具有层次结构的TreeView控件

我添加图片只是为了解问题和XAML代码

无论在“第一列”中展开多少级别,帐户类型应始终在左侧对齐

在TreeViewItemTemplate的xaml中某处我失去了想法..任何人都可以帮我修复路线

enter image description here

<DockPanel DataContext="{StaticResource cust}">
    <Button Command="{Binding rld}" Content="reload" DockPanel.Dock="Top"/>
    <!--Unbound DataGrid just to display the headers-->
    <DataGrid Height="25" DockPanel.Dock="Top" ItemsSource="{Binding Customers}" AutoGenerateColumns="False" Margin="0,0,0,0">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Name}" Header="Name" x:Name="col0"></DataGridTextColumn>
            <DataGridTextColumn Binding="{Binding AccountType}" Header="Account Type" x:Name="col1"></DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
    <!--Actual Binding with Tree View and item Template to display the properties-->
    <TreeView  ItemsSource="{Binding Customers}" DockPanel.Dock="Top">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding rel}">
                <Grid  HorizontalAlignment="Stretch">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="{Binding ElementName=col0,Path=ActualWidth}"></ColumnDefinition>
                        <ColumnDefinition Width="{Binding ElementName=col1,Path=ActualWidth}" ></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <TextBlock  Grid.Column="0" Text="{Binding Name}" VerticalAlignment="Center"/>
                    <TextBlock  Grid.Column="1" Text="{Binding AccountType}"  VerticalAlignment="Center" />
                </Grid>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>
</DockPanel>

2 个答案:

答案 0 :(得分:0)

TextBlock自然地缩进子项,所以它看起来正常。

可能的解决方法是在AccountType <TextBlock Grid.Column="1" Margin="{Binding marginPropertyInVM}" Text="{Binding AccountType}" VerticalAlignment="Center"/> 中设置负左边距并使用相同的缩进值,从而消除间隙。  只有在扩展其父级时才需要应用它。这可以很容易地修改你的viewmodels。

{{1}}

答案 1 :(得分:0)

您可以通过将模板网格列定义更改为:

来限制第一列的大小
<Grid  HorizontalAlignment="Stretch">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"></ColumnDefinition>
        <ColumnDefinition Width="{Binding ElementName=col1,Path=ActualWidth}" ></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <TextBlock  Grid.Column="0" Text="{Binding Name}" VerticalAlignment="Center"/>
    <TextBlock  Grid.Column="1" Text="{Binding AccountType}"  VerticalAlignment="Center" />
</Grid>

这样一旦第二列和缩进分配了它们的空间,第一列只允许剩余的宽度。