xaml - 未设置 UWP PersonPicture 控件背景
问题描述
PersonPicture是 Microsoft 通用 Windows 平台中提供的控件。
它看起来很棒,这就是为什么我试图用它来显示带有背景颜色的用户姓名首字母。
问题是当我将控件的背景设置为一种颜色时,显示器上的背景不会改变。
<PersonPicture Initials="JF"
Background="Red"/>
在上面的代码中,背景仍然保持默认,而其他所有内容都更新了。
如果您已经能够设置背景颜色,请分享您是如何做到的!
解决方案
我通过这个问题找到了 PersonPicture 的模板:How to get all Controls' ControlTemplates Programmatically?(UWP)
PersonPicture 忽略了它的 Background 属性并使用了几个画笔,这些画笔根据 Dark/Light 主题和一些硬编码值来构成控件的颜色。
它绘制一个椭圆/圆形,从而在四个角上显示其容器的颜色。
假设您想在包含图片的正方形中设置颜色,您可以这样做:
<Grid Background="Green">
<Grid HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="Red">
<PersonPicture />
</Grid>
</Grid>
第一个网格代表一个页面。第二个网格紧紧围绕 PersonPicture:
请注意人物图片是如何有点透明并显示网格的颜色的。模板用于椭圆的颜色是#77FFFFFF
因此,您可以通过添加椭圆更进一步:
<Grid Background="Green">
<Grid HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="Red">
<Ellipse Fill="White"/>
<PersonPicture />
</Grid>
</Grid>
这允许您通过设置椭圆的颜色来稍微控制图片的颜色:
请注意,它仍然将 PersonPicture 与背景混合,因此您不能将其设置为黑色:
<Grid Background="Green">
<Grid HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="Red">
<Ellipse Fill="Black" />
<PersonPicture />
</Grid>
</Grid>
显示:
最后,您可以复制模板(请参阅:如何以编程方式获取所有控件的 ControlTemplates?(UWP))并调整它以使用背景属性。
推荐阅读
- java - Intellij 停止 JavaFX 拖放
- php - 除了 Laravel 中的 id 之外,来自不同列的多对多关系
- r - 识别组中缺失的观察结果
- javascript - 在面积图上绘制折线图
- java - GKE 上的 Google Cloud Run for Anthos 服务如何连接到不同组织的不同项目上的 Firestore?
- sql - 如果数据库中不存在记录,则插入一条记录,如果记录已在数据库中,则向用户显示一条消息
- mysql - Sqoop 无法将数据从 MYSQL 导入 HBASE
- javascript - 根据 Android Chrome 上的字体大小调整图像大小
- java - 我想通过使用 sqlite(数据)在 gridview 中查看数据,但我的应用程序变得太慢
- php - PHP - ini_set() 期望参数 2 是字符串,给定整数