0

我正在尝试删除标题标题为空的组的组标题。但我无法使 HeaderContainerStyle 中的绑定起作用。我也不能在 TemplateHeader 中的 TextBlock 上设置可见性,因为这会留下一个小空间并且不会完全不可见。

这是我的 XAML:

<Page.Resources>
    <CollectionViewSource 
        x:Name="MenuItemsGrouped" 
        IsSourceGrouped="True"
        Source="{Binding MenuItems}" />
</Page.Resources>

<ListView Grid.Row="1" Margin="0"
            ItemsSource="{Binding Source={StaticResource MenuItemsGrouped}}"
            IsSynchronizedWithCurrentItem="False"
            SelectionMode="Single"
            SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
    <ListView.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Title}" />
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
            <GroupStyle.HeaderContainerStyle>
                <Style TargetType="ListViewHeaderItem">
                    <Setter Property="Visibility" Value="{Binding GroupHeaderVisibility}"></Setter>
                </Style>
            </GroupStyle.HeaderContainerStyle>
        </GroupStyle>
    </ListView.GroupStyle>
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Margin="0" Orientation="Horizontal">
                <TextBlock Text="{Binding Title}" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

有没有人有解决方案 - 也许是绑定不起作用的原因?

编辑:

好的,这实际上是 Windows 应用商店应用程序和早期 Silverlight 应用程序的限制:

Windows Presentation Foundation (WPF) 和 Microsoft Silverlight 支持使用绑定表达式为样式中的 Setter 提供值的能力。Windows 运行时不支持 Setter.Value 的 Binding 用法(Binding 不会计算并且 Setter 无效,您不会收到错误,但也不会获得所需的结果)。当您从 WPF 或 Silverlight XAML 转换 XAML 样式时,请将任何 Binding 表达式用法替换为设置值的字符串或对象,或者将这些值重构为共享的 StaticResource 值而不是 Binding 获得的值。

来自http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.setter

另请参阅Silverlight: How to use a binding in setter for a style (或等效的解决方法)

4

2 回答 2

1

只需尝试绑定 HeaderTemplate 的根元素的 Visibility。

    <GroupStyle.HeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Title}" Visibility = "{Binding GroupHeaderVisibility}" />
        </DataTemplate>
    </GroupStyle.HeaderTemplate>

它应该工作。祝你好运!

[编辑]

我想出了一个解决方案,它不是很优雅,但它确实有效。以下是步骤:

  1. 将此 xaml 代码添加到您的 ListView:

        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
    

2.获取GroupStyle的ContainerStyle的副本(右键单击设计表面的Listview。选择:“Edit GroupStyle”->“ContainerStyle”)。然后从 ContentControl 的属性中删除这一行:

Margin = "4"

3.将上述 ContainerStyle 应用到您的列表视图。它应该工作。

注意:第 1 步是必需的,因为当 ItemsPanel 是 ItemsStackPanel(这是默认设置)时,Windows 8.1 不再支持 ContainerStyle。

http://msdn.microsoft.com/en-us/library/windows/apps/dn263110.aspx

于 2013-11-05T14:50:26.407 回答
0

您正在绑定到Visibility类型为 的属性Visibility。我的猜测是该GroupHasHeader属性是一个布尔值;您应该使用布尔到可见性转换器

于 2013-11-05T14:31:07.337 回答