【问题标题】:How to retrieve Parent Visual Size within XamlCompositionBrushBase?如何在 XamlCompositionBrushBase 中检索父视觉大小?
【发布时间】:2018-02-27 19:01:10
【问题描述】:

我正在创建一个继承自 XamlCompositionBrushBase 的类,并且想知道当画笔连接到 OnConnected 时,视觉对象的渲染大小

我需要此信息来在我的合成中创建一个与我的视觉大小相同的表面,以便不仅具有正确的像素密度,而且还可以从视觉的坐标映射到表面的空间。

即如果我有一个坐标 50, 75,我需要知道视觉对象的宽度/高度才能将表面位置映射到视觉对象上的那个位置。

由于画笔是一个依赖对象,我尝试使用var parent = VisualTreeHelper.GetParent(this);,但抛出异常:

System.Exception 发生 HResult=0x8000FFFF
消息=灾难性故障(来自 HRESULT 的异常:0x8000FFFF (E_UNEXPECTED))
来源=

这是否可能在不使用父 UIElement 上的附加属性的情况下实现?

谢谢

【问题讨论】:

    标签: uwp winrt-xaml windows-composition-api xaml-composition


    【解决方案1】:

    你不能——因为一个画笔可以同时连接到多个视觉效果,实际上并没有“大小”的概念。好吧,反正不是在 UWP 中的这个 XAML 顶层。

    并且由于画笔可以在资源字典中使用,因此可以在多个地方作为同一个实例应用,每个地方都有不同的视觉尺寸,你真的不想破解这个问题,因为你几乎肯定会破坏任何使用资源字典中的画笔。

    (是的,令人沮丧。)

    【讨论】:

    • 内部必须有一些概念,否则 LinearGradientBrush 的 Absolute MappingMode 将不起作用。
    • 内部确定,但我们无法访问它们。这就是 WPF 的工作方式:referencesource.microsoft.com/PresentationCore/Core/CSharp/…(GetTileBrushMapping 方法)我实际上不能说它是从哪里调用的。 UWP 并不完全相同,但它是相同的想法 - 不幸的是,它都是内部的:/
    猜你喜欢
    • 2011-08-28
    • 2019-06-07
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    相关资源
    最近更新 更多