Treeview显示随机的额外空间

时间:2014-01-24 23:38:34

标签: wpf xaml treeview

我在wpf中有一个树视图,显示出一些奇怪的行为(至少我觉得这很奇怪)。我没有看到任何地方我可以附加图像,但基本上在一些项目上它看起来像是双倍间距或者有一个额外的3px左右的边距,而在某些项目看起来它是单个间隔的。以下是定义它的XAML:

        <TreeView Margin="5,0,0,5" ItemsSource="{Binding SortedCategories}" HorizontalContentAlignment="Stretch">
            <TreeView.Resources>
                <HierarchicalDataTemplate DataType="{x:Type COBie:CategoryData}" ItemsSource="{Binding SortedTypes}">
                <CheckBox IsChecked="{Binding AnyChecked, Mode=TwoWay}" Content="{Binding CategoryName}" IsEnabled="{Binding HasTypes}" />
            </HierarchicalDataTemplate>
                <DataTemplate DataType="{x:Type COBie:InstanceData}">
                    <CheckBox IsChecked="{Binding isChecked, Mode=TwoWay}" Content="{Binding ElemID}" />
                </DataTemplate>
                <DataTemplate DataType="{x:Type COBie:TypeData}">
                    <TreeViewItem IsEnabled="{Binding HasInstances}" HorizontalContentAlignment="Stretch">
                        <TreeViewItem.Header>
                            <CheckBox IsChecked="{Binding isChecked, Mode=TwoWay}" Content="{Binding ElemName}" />
                        </TreeViewItem.Header>
                        <ListView ItemsSource="{Binding SortedInstances}">
                            <ListView.View>
                                <GridView>
                                    <GridViewColumn>
                                        <GridViewColumn.CellTemplate>
                                            <DataTemplate>
                                                <CheckBox IsChecked="{Binding isChecked, Mode=TwoWay}" />
                                            </DataTemplate>
                                        </GridViewColumn.CellTemplate>
                                    </GridViewColumn>
                                    <GridViewColumn Header="ID" DisplayMemberBinding="{Binding ElemID}" />
                                    <GridViewColumn Header="Name" DisplayMemberBinding="{Binding ElemName}" />
                                    <GridViewColumn Header="Mark" DisplayMemberBinding="{Binding Mark}" />
                                    <GridViewColumn Header="Room" DisplayMemberBinding="{Binding RoomDisplay}" />
                                </GridView>
                            </ListView.View>
                        </ListView>
                    </TreeViewItem>
                </DataTemplate>
            </TreeView.Resources>
        </TreeView>

唯一适用的其他相关风格是:

        <Style TargetType="TreeViewItem">
            <Setter Property="IsExpanded" Value="{Binding IsExpanded}" />
        </Style>

我没有看到任何定义边距的地方,即使它确实所有元素属于同一类,所以它应该同样适用于所有元素。

任何人都知道发生了什么事?

1 个答案:

答案 0 :(得分:-1)

我有同样的问题,看似随机的差距。 仔细观察后,我发现项目周围出现了间隙,名称中有下划线。

如果您将字符串直接放在CheckBox的content属性中并且它包含下划线,则CheckBox将围绕一个带有名为AccessText的Control的TextBlock,可能是为了支持快捷键(类似于Button的Content属性中的下划线)。 / p>

现在由于某种原因,如果没有涉及AccessText,则在TextBlock上设置的复选框的边距完全没问题,但是没有在AccessText内的TextBlock上设置。这样,AccessText中的TextBlock将具有默认的TextBlock样式,在我的情况下是Margin = 5.

我想在你的情况下,它必须是一个密切相关的问题。