Wrappanel中的折叠物品仍然需要放置

时间:2015-10-26 08:48:50

标签: wpf xaml wrappanel

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

没有过滤器:
all items visible

带过滤器:
some items collapsed

1 个答案:

答案 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>