我在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>
我没有看到任何定义边距的地方,即使它确实所有元素属于同一类,所以它应该同样适用于所有元素。
任何人都知道发生了什么事?
答案 0 :(得分:-1)
我有同样的问题,看似随机的差距。 仔细观察后,我发现项目周围出现了间隙,名称中有下划线。
如果您将字符串直接放在CheckBox的content属性中并且它包含下划线,则CheckBox将围绕一个带有名为AccessText的Control的TextBlock,可能是为了支持快捷键(类似于Button的Content属性中的下划线)。 / p>
现在由于某种原因,如果没有涉及AccessText,则在TextBlock上设置的复选框的边距完全没问题,但是没有在AccessText内的TextBlock上设置。这样,AccessText中的TextBlock将具有默认的TextBlock样式,在我的情况下是Margin = 5.
我想在你的情况下,它必须是一个密切相关的问题。