【问题标题】:HeaderTemplate Design-Data Crashes XAML DesignerHeaderTemplate 设计数据崩溃 XAML 设计器
【发布时间】: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


    【解决方案1】:

    将此发布为可能遇到类似问题的人的答案。据我所知,XAML 设计器在使用 CollectionViewSource 时根本不支持设计数据。它不能正确处理它并且在这样做时变得非常不稳定。我在 VS2017 中再次尝试过,但没有任何改善。我只是不使用设计数据。值得庆幸的是,随着 VS2017 支持 XAML 的 Edit and Continue,设计数据不再像以前那么重要了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多