我正在构建一个UWP应用程序,在这个应用程序的特定页面上,我有一个ListView。我将此ListView的ItemsSource绑定到CollectionViewSource,以便我可以启用组头。当我将应用程序部署到模拟器或实际硬件时,这非常有效。但是,在XAML Designer中,页面显示一个空列表。我正在使用XML数据集在我的应用程序的其他页面上提供设计数据,但出于某种原因,在此页面上这样做会导致XAML Designer崩溃。
有时设计师不会崩溃,当发生这种情况时,它会正确呈现列表项,但是标题的缩放方式太大而且与页面上的其他内容重叠(请再次注意,这只发生在设计器中,它在运行时很好)。在处于此状态时尝试与设计器进行交互会导致XDesProc.exe进程开始占用30%-40%的CPU并立即冻结Designer和Visual Studio本身,直到它崩溃或我手动终止任务中的进程管理器。
查看Windows事件查看器,我看到以下堆栈跟踪:
应用程序:XDesProc.exe 框架版本:v4.0.30319 描述:由于未处理的异常,进程终止。 异常信息:Microsoft.VisualStudio.DesignTools.WindowsXamlDesigner.Views.WindowsUIXamlImageHost + RenderScheduler上的Microsoft.VisualStudio.DesignTools.WindowsXamlDesigner.Views.WindowsUIXamlImageHost.RenderWorker()中的Windows.UI.Xaml.Hosting.XamlUIPresenter.Render()上的System.AccessViolationException
的.OnRender(System.Object)
[为简洁而修剪剩余物,但可根据要求加入]
我发现如果我从CollectionViewSource 删除d:Source属性或删除整个ListView.GroupStyle部分,那么Designer不再崩溃,但当然是在前我没有设计数据,(事实上,没有任何类型的可见文本),在后者的情况下,我不再有标题。相关的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 Designer真的不喜欢我的GroupStyle.HeaderTemplate怎么样?我可以摆脱设计数据,转而支持控制ToString文本占位符,只要我在设计页面时有一些东西要看(现在,它既可以是设计数据,也可以是什么,我就是不知道为什么)。任何帮助要么弄清楚出了什么问题,要么指出我要去哪里看都会非常感激。
我的代码全部是https://github.com/Drakmyth/Hipstr的开源代码,其中的相关网页位于https://github.com/Drakmyth/Hipstr/tree/master/Hipstr.Client/Views/Rooms
答案 0 :(得分:0)
将此作为可能遇到类似问题的人的答案。据我所知,XAML Designer在使用CollectionViewSource时根本不支持设计数据。它没有正确处理它并且在这样做时变得非常不稳定。我在VS2017中再次试过这个,但没有任何改进。我只是不使用设计数据。值得庆幸的是,VS2017支持XAML的编辑和继续,设计数据并不像以前那样重要。