我在TreeViewItem中有一个Wrappanel。 Wrappanel中的项目可以通过过滤器显示(in)。问题是折叠的项目仍然需要一个破坏对齐的小地方(所有项目都有固定的宽度,边距和填充为0)。
如何删除多余的空间?
XAML的一部分(在TreeViewItem样式内):
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<CheckBox IsChecked="{Binding Assigned, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ToolTip="{Binding Description}"
Click="CheckBox_Clicked"
FontFamily="Courier New"
Padding="0,0,0,0"
Margin="0,0,0,0">
<TextBlock Text="{Binding FixedLengthName}"/>
<CheckBox.Visibility>
<MultiBinding Converter="{StaticResource PermVisibilityConv}">
<Binding Path="IsChecked" ElementName="ChangesOnly"/>
<Binding Path="Changed"/>
<Binding Path="Visible"/>
</MultiBinding>
</CheckBox.Visibility>
</CheckBox>
</DataTemplate>
</Setter.Value>
</Setter>
答案 0 :(得分:1)
感谢ZSH的帮助,我找到了解决方案 折叠CheckBox是不够的,它周围的容器也必须折叠 将Visibility-Binding从CheckBox移动到ItemContainerStyle后,View的行为应该如此。
与上面相同的XAML部分,现在没有折叠项占用的空间:
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Visibility">
<Setter.Value>
<MultiBinding Converter="{StaticResource PermVisibilityConv}">
<Binding Path="IsChecked" ElementName="ChangesOnly"/>
<Binding Path="Changed"/>
<Binding Path="Visible"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<CheckBox IsChecked="{Binding Assigned, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ToolTip="{Binding Description}" Click="CheckBox_Clicked"
FontFamily="Courier New">
<TextBlock Text="{Binding FixedLengthName}"/>
</CheckBox>
</DataTemplate>
</Setter.Value>
</Setter>