Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf Treeview显示随机的额外空间_Wpf_Xaml_Treeview - Fatal编程技术网

Wpf Treeview显示随机的额外空间

Wpf Treeview显示随机的额外空间,wpf,xaml,treeview,Wpf,Xaml,Treeview,我在wpf中有一个树视图,它显示了一些奇怪的行为(至少我认为它很奇怪)。我看不到任何可以附加图像的地方,但基本上在一些项目上,它看起来像是双倍行距的,或者有额外的3px左右的边距,在一些项目上,它看起来像是单倍行距的。下面是定义它的XAML: <TreeView Margin="5,0,0,5" ItemsSource="{Binding SortedCategories}" HorizontalContentAlignment="Stretch">

我在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>

我看不到任何地方定义了边距,即使它定义了边距,所有元素都属于同一类,所以它应该平等地应用于所有元素


有人知道发生了什么吗?

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

如果将字符串直接放在复选框的content属性中,并且它包含下划线,则复选框将用名为AccessText的控件包围TextBlock,这可能是为了支持快捷键(类似于Button content属性中的下划线)

现在,由于某种原因,如果没有涉及AccessText,复选框的边距在TextBlock上设置得非常好,但在AccessText内的TextBlock上没有设置。这样,AccessText中的TextBlock将具有默认的TextBlock样式,在我的示例中,它的边距为5


我想在您的情况下,这一定是一个密切相关的问题。

我还检查了ElemName属性值中的项目的ElemName值,这些项目过去和现在都没有显示额外的空格,并且ElemName属性的值中也没有额外的空格或换行符(这就是正在显示的内容…好的,我仍然不明白为什么会发生这种情况。我尝试在标题中对复选框的高度进行硬编码,保留了边距。因为它看起来确实像一个边距,所以我尝试将边距编码为0,没有任何更改。但是我确实找到了解决方法。如果不使用Content={Binding ElemName}在复选框定义中,我将其扩展为,它看起来很正常。我不确定为什么,但它起作用了…如果有人能解释为什么第二个有效,而不是第一个,我会将其标记为答案…嗯,很有趣。我从此开始使用textblock技巧,并对UI进行了一些修改,但无论如何,我会尝试使用它但是,既然你是唯一一个回答的人,我会继续,并将其标记为答案:)