【发布时间】:2017-05-02 02:53:40
【问题描述】:
我正在构建一个 UWP 应用,并且在该应用的特定页面上我有一个 ListView。我将此 ListView 的 ItemsSource 绑定到 CollectionViewSource,以便我可以启用组标题。当我将应用程序部署到模拟器或实际硬件时,这非常有效。但是,在 XAML 设计器中,页面显示一个空列表。我正在使用 XML 数据集在我的应用程序的其他页面上提供设计数据,但由于某种原因,在此页面上这样做会导致 XAML 设计器崩溃。
有时设计器不会崩溃,当这种情况发生时,它会正确呈现列表项,但标题都缩放得太大并且与页面上的其他内容重叠(再次注意,这只发生在设计器中,在运行时很好)。在此状态下尝试与设计器交互会导致 XDesProc.exe 进程开始占用 30%-40% 的 CPU 并立即冻结设计器和 Visual Studio 本身,直到它崩溃或我手动终止任务中的进程经理。
查看 Windows 事件查看器,我看到以下堆栈跟踪:
应用程序:XDesProc.exe 框架版本:v4.0.30319 说明:进程因未处理的异常而终止。 异常信息:Microsoft.VisualStudio.DesignTools.WindowsXamlDesigner.Views.WindowsUIXamlImageHost.RenderWorker() 的 Windows.UI.Xaml.Hosting.XamlUIPresenter.Render() 的 System.AccessViolationException Microsoft.VisualStudio.DesignTools.WindowsXamlDesigner.Views.WindowsUIXamlImageHost+RenderScheduler .OnRender(System.Object) 在
[为简洁起见修剪了剩余部分,但可应要求包括在内]
我发现如果我从 CollectionViewSource 中删除 d:Source 属性 或 删除整个 ListView.GroupStyle 部分,设计器不再崩溃,但当然在前者我没有设计数据,(事实上,没有任何类型的可见文本),在后者的情况下,我不再有标题。相关XAML如下:
<Page.Resources>
<ResourceDictionary>
<CollectionViewSource x:Name="GroupedRoomsSource"
Source="{x:Bind ViewModel.RoomGroups, Mode=OneWay}"
IsSourceGrouped="True"
ItemsPath="Rooms"
d:Source="{Binding RoomGroups, Source={d:DesignData Source=/SampleData/RoomsViewModelSampleData.xaml}}"/>
</ResourceDictionary>
</Page.Resources>
<ListView x:Name="RoomList"
Grid.Row="0"
ItemsSource="{Binding Source={StaticResource GroupedRoomsSource}}">
<ListView.GroupStyle>
<GroupStyle HidesIfEmpty="True">
<GroupStyle.HeaderTemplate>
<DataTemplate x:DataType="models:RoomGroup">
<TextBlock Text="{x:Bind Header}"
Foreground="White"
FontSize="24" />
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
<ListView.ItemTemplate>
<DataTemplate x:DataType="models:Room">
<StackPanel>
<TextBlock Text="{x:Bind Name}"
Foreground="White" />
<TextBlock Text="{x:Bind Team.Name}"
Foreground="LightGray"
FontSize="10" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我的问题很简单,我做错了什么? XAML 设计器真的不喜欢我的 GroupStyle.HeaderTemplate 怎么样?我可以摆脱设计数据以支持控制 ToString 文本占位符,只要我在设计页面时有一些东西可以看(现在,它要么是设计数据,要么什么都没有,我不知道为什么)。任何帮助找出问题所在或指出我应该寻找的方向都将不胜感激。
我的代码在https://github.com/Drakmyth/Hipstr 全部开源,相关页面在https://github.com/Drakmyth/Hipstr/tree/master/Hipstr.Client/Views/Rooms
【问题讨论】:
标签: listview uwp grouping designer uwp-xaml