UWP AutoSuggestBox 自定义图标

Posted

技术标签:

【中文标题】UWP AutoSuggestBox 自定义图标【英文标题】:UWP AutoSuggestBox Customize Icons 【发布时间】:2018-01-20 13:37:48 【问题描述】:

我在我的应用中使用 AutoSuggestBox,我更喜欢进行以下更改。

    在使用 QueryIcon=Find 时,我可以在最右侧看到搜索。我可以把它左对齐吗(类似于边缘搜索窗口) 我可以自定义“全部清除”按钮吗?我想在不同的时间使用不同的图标,具体取决于 SuggestBox 中的某些操作。

你能指出我的选择吗...

谢谢

【问题讨论】:

【参考方案1】:

AutoSuggestBox 是一个密封控件,因此您无法对其进行重新模板化以对其进行自定义,而不仅仅是为您提供的属性。您可以覆盖许多资源(请参阅 generic.xaml 和 docs),例如,更改图标的大小:

<x:Double x:Key="AutoSuggestBoxIconFontSize">12</x:Double>

理论上,您还可以爬取可视化树以检索某些元素并在代码隐藏中修改它们,但这可能会很混乱、引入错误并导致性能下降。

可以在 AutoSuggestBox 上设置 TextBoxStyle 并将其设置为自定义 TextBox,您可以在其中操作某些 XAML 以满足您的需求,但您需要创建一个新的完整样式对于您需要的每个变化。这样做的缺点是,因为您需要整个 TextBox 模板的多个实例,您会受到性能影响,并且会阻止您在将来免费接收错误修复和 TextBox 样式的更新。

您还可以使用您喜欢的任何自定义功能实现您自己的 AutoSuggestBox。这可能是一个更复杂的解决方案,但它可能是最简单且性能最高的选项。

我建议不要进行其中一些更改,因为它们会与平台的其他部分不一致,并且可能会使用户感到困惑。在 Edge 中,左侧有 一个搜索字形,但该字形与 AutoSuggetsBox 中的搜索按钮不同。实际上,Edge 似乎并没有使用 AutoSuggestBox 控件,而是有自己的自定义实现。

【讨论】:

不,当您简单地尝试为控件创建样式时,您不会受到性能影响。 无论您将这些样式放在 App.xaml 还是 Page.Resources 中,它都需要在某个时候加载,这引入性能损失。风格越复杂,影响越大。他们希望在不同的时间使用不同的图标,这意味着完整的 TextBox 控件模板的多个副本,因为您无法在不覆盖整个控件模板的情况下在模板中操作 FontIcon 的字形或位置,这将是一个比较大的打击到不覆盖控件模板或覆盖更简单控件的模板的样式,如 Button。 我的应用程序使用了超过 100 种自定义样式以及许多 svg/路径图标和情节提要动画,但我从来没有注意到任何启动延迟。您可以尝试在应用中包含大量资源字典,它的加载速度也一样快。 最终,我们在这里以毫秒为单位进行讨论,但取决于您添加样式的方式/位置以及您在may be optimizations 中如何使用它们以帮助限制影响。 有趣。感谢您的链接。看起来现在 UWP 应用程序自动支持 XBF2?这有点支持我的观点? :)【参考方案2】:

您唯一需要的是应用新样式,您可以从AutoSuggestBox styles and templates 找到默认样式。因此,如果您想将QueryButton 向左对齐,请更改布局。

【讨论】:

以上是关于UWP AutoSuggestBox 自定义图标的主要内容,如果未能解决你的问题,请参考以下文章

win10 uwp 自定义控件 SplitViewItem

UWP使用 Rx 改善 AutoSuggestBox

UWP使用 Rx 改善 AutoSuggestBox

UWP 绑定到 MVVM 中的 AutoSuggestBox

AutoSuggestBox UWP 中的结果分组

UWP自动填充控件AutoSuggestBox小优化