阴影位于文本上方

2024-01-04

我正在向 Xamarin.UWP 项目添加阴影(但问题并不是真正特定于 Xamarin,而是一般来说是 UWP):

bool IsShadowSupported => ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 3); // SDK >= 14393

if (IsShadowSupported) {
  var compositor = ElementCompositionPreview.GetElementVisual(Control).Compositor;
  dropShadow = compositor.CreateDropShadow();
  if (Control is Windows.UI.Xaml.Controls.TextBlock textBlock)
    dropShadow.Mask = textBlock.GetAlphaMask();
  shadowVisual = compositor.CreateSpriteVisual();
  shadowVisual.Shadow = dropShadow;
  ElementCompositionPreview.SetElementChildVisual(Control, shadowVisual);
  ...
  dropShadow.Offset = new Vector3((float)Shadow.GetDistanceX(Element), (float)Shadow.GetDistanceY(Element), -5f);
}

它运行并出现阴影 - 但在文本上方,而不是在文本下方。起初我认为这将由偏移的 Z 坐标决定,但没有负值、正值或零值会改变任何东西。阴影看起来像这样:

这本身并不是一个坏的效果,但它不是所要求的:白色文本和其下方的深灰色阴影。


问题是SetElementChildVisual将视觉效果设置为给定元素的最后一个子元素,这将使阴影出现在元素上方TextBlock。不幸的是,连孩子的父母都没有TextBlock就足够了,您应该有一个相邻的元素来承载阴影:

<Grid x:Name="ShadowHost" />
<TextBlock x:Name="Hello" Text="Hello" />

Now use ShadowHost代替Control在你的代码中,除了GetAlphaMask调用你应该使用的地方TextBlock反而。

当然,要使阴影发挥作用,需要做很多工作,这就是为什么您可以尝试使用 Windows Community Toolkit 的原因DropShadowPanel相反 - 请参阅文档 https://learn.microsoft.com/en-us/windows/communitytoolkit/controls/dropshadowpanel了解更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阴影位于文本上方 的相关文章

随机推荐

  • 如何检测用户的时区?

    我需要根据用户的 IP 或 http 标头了解用户当前所在的时区 关于这个问题我得到了很多答案 但我无法理解这些答案 有的说用 new Date getTimezoneOffset 60 从这里 https stackoverflow co
  • Elasticsearch 计算忽略空格的术语

    使用ES 1 2 1 我的聚合 size 0 aggs cities terms field city size 300000 问题是某些城市名 称中包含空格并单独聚合 例如洛杉矶 key Los doc count 2230 key An
  • 没有为参数“appIdName”提供值

    每当我尝试执行任何配置 向门户添加设备等操作时 都会收到以下错误消息 No value was provided for the parameter appIdName 我看过这个帖子 配置时未为参数 appId Name 提供值 http
  • 在 fzf 中按一次按键执行突出显示的命令

    I m using fzf Ctrl R binding to navigate the command line history Now first Enter keypress selects the command and the s
  • 如何知道进程已崩溃

    在我的控制台应用程序中 我的代码如下所示 Process DKU new Process DKU StartInfo FileName MSSQLExecutor exe DKU Start DKU WaitForExit Console
  • 如何解决 - TypeError: 无法安全地将非等价的 float64 转换为 int64?

    我正在尝试将 DF 中的一些浮点列转换为 int 但出现上述错误 我尝试过将其转换以及 fillna 为 0 我不喜欢这样做 因为在我的数据集中需要 NA 我究竟做错了什么 我都尝试过 orginalData NumericColumns
  • Objective-C 使用短路评估吗?

    我尝试了以下内容 if myString nil myString length And got NSNull length 发送到实例的无法识别的选择器 第一个条件失败后 Objective C 不会短路吗 Objective C 确实支
  • iPhone 应用程序可以充当服务器来发送消息或推送通知吗?

    我想写一个可以充当客户端的iOS应用程序and通过蜂窝数据网络连接其他 iPhone 的服务器 即没有典型的集中式服务器 目标是通过某种通知方式从 iPhone 服务器向多个 iPhone 客户端共享一系列约 200 条短事件消息 一次一条
  • 获取Google广告ID并限制广告

    我正在构建一个 Unity Android 应用程序 并查看一些广告 我们正在考虑的一项服务需要我的谷歌广告 ID 并限制广告状态 以便进行服务器到服务器的转换跟踪 问题是我不确定如何在 Unity 中获取这些值 看来我需要某种形式的插件
  • 将值插入循环内的关联数组中

    我是 php 的新手 我使用 foreach 循环来遍历已解码对象的数组 我想为每次迭代向新数组输入值 这是代码的一部分 example of array before decoding it id 1 quantity 12 other
  • jQuery 在 jsFiddle 中可以运行,但在我的电脑上不行

    我是 jQuery 的新手 一整天都在绞尽脑汁试图确定为什么这个脚本在 jsFiddle 中运行而不是在我的计算机上运行 我没有服务器设置 我只是从桌面在浏览器中启动 html 代码在这里工作正常 http jsfiddle net 9Du
  • Julia 语言 - @async 任务中的状态 :: 当前目录

    我注意到 阅读 捕获了生产错误 Julia 中的不同任务 没有自己的工作目录 但当前目录 是共享的 我意识到在操作系统级别这是显而易见的 一个进程有一个工作目录 我的问题是第一 是否有任何其他明显或不太明显的全局状态我应该注意 显然是环境变
  • Box.COM 与 Android 应用程序集成-OAuthActivity-NullpointerException?

    我正在整合BOX COM与我的 android 应用程序 所以我正在使用BoxAndroidLibraryV2 and BoxJavaLibraryV2与我的申请 我可以运行示例 Android 应用程序BoxSDKSample 因此 我从
  • 使用 R 中的 fct_reorder 根据值重新排序因子

    My data structure list LoB c C C C A A B C A A C A B C B A C B A B C A B B A B C A B C B word c speed connection call bt
  • 如何使用 ansible 'expect' 模块来处理多个不同的响应?

    在这里 我尝试测试我的 bash 脚本 它提示了四次 bin bash date gt opt prompt txt read p enter one one echo one echo one gt gt opt prompt txt r
  • 如何在perl中删除文件的最后10行

    我将总行数作为用户输入 然后从文件中删除这些行数 我看到了这个 learn perl org faq perlfaq5 html How do I count the number of lines in a file 然后我厌倦了下面的简
  • 堆转储中不可能的 Java 内存引用

    我有一个在晚上 7 41 拍摄的 Java 堆转储 我正在使用 Eclipse 内存分析工具对其进行分析 堆转储包含 20 个会话对象 对堆中的这些会话对象之一使用 GC 根路径 命令会显示以下 3 个对该会话对象的引用 来自终结器线程拥有
  • 找不到netbeans 8.0.2中maven本地存储库路径的设置位置

    在 netbeans 中 当我转到 工具 gt 选项 gt Java gt Maven 面板时 显示 Maven 主页 捆绑Maven主页 https i stack imgur com 8yQIQ png 但是我在Netbeans 8 0
  • Heroku、Grails:如果使用多个 Web dyno,则会缺少资源

    我已经创建了 grails 应用程序并将其上传到 heroku 中 如果我使用 heroku 规模网络 1 一切看起来都不错 但如果我跑 heroku 规模网络 2 一些静态资源消失了 从日志中我可以看出 web 2 dyno 中的所有静态
  • 阴影位于文本上方

    我正在向 Xamarin UWP 项目添加阴影 但问题并不是真正特定于 Xamarin 而是一般来说是 UWP bool IsShadowSupported gt ApiInformation IsApiContractPresent Wi