Wrappanel 中折叠的项目仍然需要放置
Collapsed Items in Wrappanel still need place
我在 TreeViewItem 中有一个 Wrappanel。 Wrappanel 内的项目可以通过过滤器设置为可见(不可见)。问题是折叠的项目仍然需要一个小地方,这会破坏对齐方式(所有项目都有固定宽度,边距和填充为 0)。
如何删除多余的 space?
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>
没有过滤器:
带过滤器:
感谢ZSH的帮助,我找到了解决办法
仅折叠 CheckBox 是不够的,它周围的 Container 也必须折叠。
在我将 Visibility-Binding 从 CheckBox 移动到 ItemContainerStyle 之后,View 的行为就如它应该的那样。
与上面 XAML 相同的部分,现在没有 space 被折叠的项目占据:
<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>
我在 TreeViewItem 中有一个 Wrappanel。 Wrappanel 内的项目可以通过过滤器设置为可见(不可见)。问题是折叠的项目仍然需要一个小地方,这会破坏对齐方式(所有项目都有固定宽度,边距和填充为 0)。
如何删除多余的 space?
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>
没有过滤器:
带过滤器:
感谢ZSH的帮助,我找到了解决办法
仅折叠 CheckBox 是不够的,它周围的 Container 也必须折叠。
在我将 Visibility-Binding 从 CheckBox 移动到 ItemContainerStyle 之后,View 的行为就如它应该的那样。
与上面 XAML 相同的部分,现在没有 space 被折叠的项目占据:
<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>