WPF 学习笔记(三)

WPF 学习笔记系列是笔者在学习 WPF 并开发 路遥工具箱 时遇到的一些问题的记录和解决方案。因知识点过于琐碎,针对每个问题都单开博客显得比较小题大作,故此才形成了 WPF 学习笔记系列博文。

WPF 应用开发中可编辑 ComboBox 的数据绑定

设置 ComboBox 的 IsEditable 属性为 True 可以让 ComboBox 支持用户编辑。这种情况下,如果需要获取用户编辑后的数据,绑定 SelectedItem 或 SelectedValue 均无法获取正确的结果。为了解决这个问题,需要将绑定设置在 ComboBox 的 Text 属性上:

<ComboBox IsEditable="True" x:Name="GroupComboBox" Text="{Binding GroupName}"></ComboBox>

TextBlock 文字超出宽度后显示省略号

设置 TextBlock 的 TextTrimming 属性为 CharacterEllipsis 可以在文本超长时显示省略号:

<TextBlock TextTrimming="CharacterEllipsis" Text="{Binding Result}"></TextBlock>

自定义按钮样式后按钮很难点击到或按钮背景点击不到

如果为按钮自定义了样式,比如在按钮上显示了 Path 或一张图片。可能会遇到按钮点击画图外区域命令不响应的问题,如果定义的 Path 过小,就会让按钮很难点到。产生这个问题的原因是没有为模板设置背景,导致命令事件没有捕获。解决方案就是在按钮模板最外层嵌套一个 Border 元素并将其背景色设置为透明。

如果你在处理 Mouse 相关事件时遇到问题,也有可能是背景色未设置造成的。

在 XAML 中为列表进行排序

有时需要在前端界面中(XAML)对数据进行排序,但 MVVM 中后端 ViewMode 暴露的 ObservableCollection 不支持排序功能。在数据量较小时,可以通过先删除排序好后再添加的方式实现数据排序。在数据量较大时,这样做就会造成系统卡顿,解决方案之一就是在前端直接使用 CollectionViewSource 进行排序。

关于 CollectionViewSource 的详情,可以参见微软的帮助文档:CollectionViewSource 类

首先引入 scm 命名空间:

xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"

创建数据源,并指定排序方式:

    <UserControl.Resources>
        <CollectionViewSource x:Key="GroupItemsSource" Source="{Binding GroupItems}">
            <CollectionViewSource.SortDescriptions>
                <scm:SortDescription PropertyName="Value"></scm:SortDescription>
            </CollectionViewSource.SortDescriptions>
        </CollectionViewSource>
    </UserControl.Resources>

以上代码设置数据源为 VM 中的 GroupItems ,并按照 Value 属性进行排序。

欢迎来到:码农很忙
原文地址:https://www.cnblogs.com/Soar1991/p/15753278.html