I'm creating a class inheriting from XamlCompositionBrushBase and want to know the render size of the visual the brush is attached to when it's hooked up in
I need this info to create a surface in my composition that's the size of my visual in order to not only have the right pixel density, but also map from the visual's coordinates into the surface's space.
i.e. if I have a coordinate 50, 75, I need to know the width/height of the visual to map the surface location to that location on the visual.
Since the brush is a dependency object, I tried using
var parent = VisualTreeHelper.GetParent(this); but that threw an exception:
System.Exception occurred HResult=0x8000FFFF
Message=Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
Is this possible without using an attached property on the parent UIElement?
You cannot - because a brush can be connected to multiple visuals at once there's not really a concept of a "size". Well, not at this top layer of XAML in UWP anyway.
And as brushes can be used in resource dictionaries and hence applied as the same instance in multiple places each with different visual sizes, you really don't want to hack your way around this as you'll almost certainly break any usages of the brush in a resource dictionary.
(Which yes, is frustrating.)
User contributions licensed under CC BY-SA 3.0