Wpf Treeview显示随机的额外空间
我在wpf中有一个树视图,它显示了一些奇怪的行为(至少我认为它很奇怪)。我看不到任何可以附加图像的地方,但基本上在一些项目上,它看起来像是双倍行距的,或者有额外的3px左右的边距,在一些项目上,它看起来像是单倍行距的。下面是定义它的XAML:Wpf Treeview显示随机的额外空间,wpf,xaml,treeview,Wpf,Xaml,Treeview,我在wpf中有一个树视图,它显示了一些奇怪的行为(至少我认为它很奇怪)。我看不到任何可以附加图像的地方,但基本上在一些项目上,它看起来像是双倍行距的,或者有额外的3px左右的边距,在一些项目上,它看起来像是单倍行距的。下面是定义它的XAML: <TreeView Margin="5,0,0,5" ItemsSource="{Binding SortedCategories}" HorizontalContentAlignment="Stretch">
<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进行了一些修改,但无论如何,我会尝试使用它但是,既然你是唯一一个回答的人,我会继续,并将其标记为答案:)