XAML项目控制可见性

时间:2010-03-18 00:07:20

标签: xaml

我的XAML代码中有一个ItemsControl。当一些触发器发生时,我想要折叠完整的itemsControl,所以所有的元素。

                        <ItemsControl Name="VideoViewControl"  ItemsSource="{Binding Videos}">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <WrapPanel ItemHeight="120" ItemWidth="160" Name="wrapPanel1"/>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <views:VideoInMenuView />
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>

触发器:

     <DataTrigger Value="videos" Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}, AncestorLevel=1}, Path=DataContext.VideosEnable}">
                    <Setter Property="ScrollViewer.Visibility" Value="Visible" TargetName="test1" />
                    <Setter Property="ScrollViewer.Visibility" Value="Collapsed" TargetName="test2" />
<Setter Property="WrapPanel.Visibility" Value="Collapsed" TargetName="wrapPanel1" />
                </DataTrigger>

当我添加最后一个setter时,程序崩溃了。 没有这个最后的设定器,它工作正常,但没有可见性改变....

这段代码有什么问题?使用触发器折叠ItemsControl的所有元素的write方法是什么?

2 个答案:

答案 0 :(得分:0)

如果你想隐藏整个ItemsControl,那么只需隐藏ItemsControl本身,而不是它的内部组件(ScrollViewer和WrapPanel):

<ItemsControl.Style>
    <Style TargetType="ItemsControl">
        <Style.Triggers>
            <DataTrigger ...>
                <Setter Property="Visibility" Value="Collapsed" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ItemsControl.Style>

这只会在ItemsControl本身上设置Visibility to Collapsed,听起来就像你想要的那样。

答案 1 :(得分:0)

我找到了解决方案:

我将其添加到itemscontrol的项目中:

Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
             AncestorType={x:Type ItemsControl}}, Path=Visibility, Mode=TwoWay}"

在WPF hittest算法中,我检查了visibility属性是否被绑定。

这不是一个很好的解决方案,但它对我有用....

很奇怪,如果你将itemscontrol的visibility属性设置为折叠,那么项目的visibility属性是可见的...... bug?

同样奇怪:最热门的人可以找到折叠的物品......