我正在尝试删除标题为空的组的组标题。但我无法使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支持使用Binding表达式提供Value对于一种风格的设定者。Windows运行时不支持绑定Setter.Value的用法(绑定不会求值,Setter具有没有效果,你不会出错,但你不会得到想要的结果或者(。从WPF或Silverlight XAML转换XAML样式时,将任何Binding表达式用法替换为字符串或对象值,或者将这些值重构为共享的StaticResource值比Binding获得的值大。
来自http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.setter
另请参阅Silverlight:如何在setter中为样式(或等效的解决方案(使用绑定
只需尝试绑定HeaderTemplate根元素的Visibility即可。
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title}" Visibility = "{Binding GroupHeaderVisibility}" />
</DataTemplate>
</GroupStyle.HeaderTemplate>
它应该起作用。祝你好运
[编辑]
我已经找到了一个解决方案,它不是很优雅,但它有效。以下是步骤:
将此xaml代码添加到您的ListView:
<ListView.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel /> </ItemsPanelTemplate> </ListView.ItemsPanel>
2.获取GroupStyle的ContainerStyle副本(右键单击设计图面上的Listview。选择:"Edit GroupStyle"->"ContainerStyle"(。然后从ContentControl:的属性中删除此行
Margin = "4"
3.将上述ContainerStyle应用于您的列表视图。它应该起作用。
注意:步骤1是必要的,因为当ItemsPanel是ItemsStackPanel(默认设置(时,ContainerStyle在Windows 8.1上不再适用。
http://msdn.microsoft.com/en-us/library/windows/apps/dn263110.aspx
您正在绑定到类型为Visibility
的Visibility
属性。我的猜测是GroupHasHeader
属性是一个布尔值;您应该使用布尔值到可见性的转换器。