问题描述
|
我敢肯定这很简单,但是我似乎无法弄清楚。
我有一个ListBox来显示项目,并且这些项目与DataTemplate一起显示。我现在想对这些项目进行分组,因此已基于制造商属性添加了一个分组。这是在后面的代码中完成的。
ICollectionView view = CollectionViewSource.GetDefaultView(Items);
PropertyGroupDescription groups = new PropertyGroupDescription(\"Manufacturer\");
view.GroupDescriptions.Add(groups);
我希望每个组都在扩展器中,以便可以将其隐藏。我可以通过查看MSDN上的GroupTemplates来完成这项工作。这涉及到拥有一个扩展器,文本块,然后使用分隔符来排除多余的空间,例如Windows Vista / 7组。如下。
我遇到的问题是我无法使分隔符正确填充剩余空间。如果使用MinWidth值,则所有扩展器的宽度都相同。如果我使用{binding ActualWidth,ElementName = MyListBox},则分隔符太宽,与包含它的控件一样宽。因此,它将滚动条设置为可见(请参见下面的屏幕截图)。如果我将宽度留为空白,则根本不会绘制分隔符。
我的直觉是,堆栈面板应该已经扩展分隔符以使用剩余的空间,但是没有。所以我尝试了下面的XamlCode中的DockPanel,但这也失败了。我还有其他一些问题,要通过使用适当的宽度来获取控件来填充剩余的空间,因此,如果您可以帮助我解决此问题,那就太好了。
我当前的WPF Xaml标记。您将需要添加元素以使其显示某些内容。
<Window
xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"
xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"
Title=\"MainWindow\" Height=\"350\" Width=\"525\">
<ScrollViewer VerticalScrollBarVisibility=\"Auto\">
<StackPanel x:Name=\"myStackPanel\">
<ListBox x:Name=\"MyListBox\">
<ListBox.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType=\"{x:Type GroupItem}\">
<Setter Property=\"Template\">
<Setter.Value>
<ControlTemplate TargetType=\"{x:Type GroupItem}\">
<Expander IsExpanded=\"True\">
<Expander.Header>
<DockPanel HorizontalAlignment=\"Stretch\"
VerticalAlignment=\"Stretch\"
Height=\"Auto\"
Width=\"{Binding ActualWidth,ElementName=MyListBox}\"
Margin=\"10\">
<TextBlock DockPanel.Dock=\"Left\" Margin=\"0\" FontSize=\"14\" FontWeight=\"Bold\" Foreground=\"Black\" Text=\"{Binding Path=Name}\"/>
<Separator DockPanel.Dock=\"Right\" Margin=\"4,4,0\"></Separator>
</DockPanel>
</Expander.Header>
<ItemsPresenter Margin=\"5,0\" />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ListBox.GroupStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<!-- Data Template Here -->
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</ScrollViewer>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)