HeaderTemplate Design-Data崩溃XAML Designer

时间:2016-12-22 19:18:48

标签: listview uwp grouping designer uwp-xaml

我正在构建一个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

1 个答案:

答案 0 :(得分:0)

将此作为可能遇到类似问题的人的答案。据我所知,XAML Designer在使用CollectionViewSource时根本不支持设计数据。它没有正确处理它并且在这样做时变得非常不稳定。我在VS2017中再次试过这个,但没有任何改进。我只是不使用设计数据。值得庆幸的是,VS2017支持XAML的编辑和继续,设计数据并不像以前那样重要。