Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果扩展器中没有项目,则隐藏标题_C#_Wpf_Header_Expander - Fatal编程技术网

C# 如果扩展器中没有项目,则隐藏标题

C# 如果扩展器中没有项目,则隐藏标题,c#,wpf,header,expander,C#,Wpf,Header,Expander,如果扩展器内容中没有项目,我会知道是否有一些快速的方法来隐藏所有扩展器标题 我的扩展器: <Expander IsExpanded="True" Loaded="Expander_Loaded" Visibility="{Binding Items[0],Converter={StaticResource collectionVisibilityHeaderConverter}}"> <Expander.Header> <DockPanel

如果扩展器内容中没有项目,我会知道是否有一些快速的方法来隐藏所有扩展器标题

我的扩展器:

<Expander IsExpanded="True" Loaded="Expander_Loaded" Visibility="{Binding Items[0],Converter={StaticResource collectionVisibilityHeaderConverter}}">
    <Expander.Header>
        <DockPanel HorizontalAlignment="Stretch" >
            <TextBlock Text="{Binding Path=Name}" FontSize="18"></TextBlock>
            <Button Style="{StaticResource ButtonStyle}" x:Name="ShowAllButton" Content=" SHOW ALL " HorizontalAlignment="Right" DockPanel.Dock="Right"  Padding="15" Margin="0,0,15,0" Click="ShowAllButton_Click"></Button>
            <Button Style="{StaticResource ButtonStyle}" x:Name="ShowOnlyButton" Content=" SHOW ONLY " HorizontalAlignment="Right" DockPanel.Dock="Right" Padding="15" Margin="0,0,15,0" Click="ShowOnlyButton_Click"></Button>
        </DockPanel>
    </Expander.Header>
    <Expander.Style>
        <Style TargetType="{x:Type Expander}">
            <Setter Property="Background" Value="#ccf2ff"></Setter>
            <Setter Property="TextElement.FontFamily" Value="Arial Nova"/>
        </Style>
    </Expander.Style>
    <Expander.Content>
        <ItemsPresenter />
    </Expander.Content>
</Expander>


我现在使用的是一个转换器,它基本上可以工作,但我认为有更简单的方法。

您可以在
扩展器中使用
数据触发器

<Expander IsExpanded="True" Loaded="Expander_Loaded">
    <Expander.Header>
        <DockPanel HorizontalAlignment="Stretch" >
            <TextBlock Text="{Binding Path=Name}" FontSize="18"></TextBlock>
            <Button Style="{StaticResource ButtonStyle}" x:Name="ShowAllButton" Content=" SHOW ALL " HorizontalAlignment="Right" DockPanel.Dock="Right"  Padding="15" Margin="0,0,15,0" Click="ShowAllButton_Click"></Button>
            <Button Style="{StaticResource ButtonStyle}" x:Name="ShowOnlyButton" Content=" SHOW ONLY " HorizontalAlignment="Right" DockPanel.Dock="Right" Padding="15" Margin="0,0,15,0" Click="ShowOnlyButton_Click"></Button>
        </DockPanel>
    </Expander.Header>
    <Expander.Style>
        <Style TargetType="{x:Type Expander}">
            <Setter Property="Background" Value="#ccf2ff"></Setter>
            <Setter Property="TextElement.FontFamily" Value="Arial Nova"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Items.Count}" Value="0">
                    <Setter Property="Visibility" Value="Collapsed" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Expander.Style>
    <Expander.Content>
        <ItemsPresenter />
    </Expander.Content>
</Expander>


在我看来,这是正确的方法。什么是项目[0]?此扩展器是否位于某些ItemsControl中的Item模板中?如果Items大于IEnumerable,则它将具有Count属性。您可以在样式中放置一个触发器,在Items.Count为零时隐藏扩展器,如果可能的话,在Items为null时放置另一个触发器。我就是这么做的,但是你的方法非常好。我看到你正在按照我的建议处理加载的事件。如果您的问题已经解决,请记住接受答案: