gpt4 book ai didi

wpf - 我应该使用 AdornerLayer 来避免在屏幕外剪裁我的装饰器吗?

转载 作者:行者123 更新时间:2023-12-02 02:32:03 30 4
gpt4 key购买 nike

我正在编写一些涉及装饰器的 WPF 代码。我正在使用 Josh Smith 的 UIElementAdorner.cs(在他的项目中找到 Infragistics Blog )。我装饰着信息文本的简介。我需要巧妙地放置我的装饰物,这样它就不会从屏幕上剪下来。

确定我是否要剪辑的最佳方法是什么?

我正在使用以下代码来创建和放置我的装饰器。我有一种有趣的感觉,基于我是否会剪辑 AdornerLayer不是最好的选择。

var infoBubble = new InfoBubble {InformationText = @"I like cheese."};
var adornedElementRect = new Rect(Target.DesiredSize);
var layer = AdornerLayer.GetAdornerLayer(Target);

var adorner = new UiElementAdorner<Control>(Target) { Child = infoBubble };
adorner.Measure(new Size(layer.ActualWidth, layer.ActualHeight));

var adornerRect = new Rect(adorner.DesiredSize);
var top = -1*(adornerRect.Height);
var left = adornedElementRect.Width/2;

// Using layer to judge where to place the adorner
var upperLeftPoint = Target.TranslatePoint(new Point(left, top), layer);
var lowerRightPoint = Target.TranslatePoint(new Point(left + adornerRect.Width,
top + adornerRect.Height), layer);

if (upperLeftPoint.Y < 0) top -= upperLeftPoint.Y; // shift down by Y
if (lowerRightPoint.X > layer.ActualWidth)
left -= (lowerRightPoint.X - layer.ActualWidth); // shift left

请记住,此代码包含在 TargetedTriggerAction 中设计师(又名 Blend 用户)希望在某些 UI 元素上方显示信息时使用。因此,这段代码对要装饰的元素或其环境知之甚少。

最佳答案

是的,这是我能辨别的最佳答案。

根据进一步阅读和一些实验,当调用 GetAdornerLayer 时,我们收到可视化树中目标控件上方的最低层。这意味着我们可以在 AdornerDecorator 下面得到一层在窗口模板中定义的图层。较低的 AdornerDecorator 可以有 ClipToBounds="True"(我不知道为什么,但它可以)。

了解此信息后,我可以相对确定我正在绘制的 AdorneLayer 是我正在绘制的最佳边界框。我可以在此框外绘制(例如,如果 ClipToBounds 在低于 Window 的 AdornerDecorator 上为 False),但我不应该指望这种能力。

关于wpf - 我应该使用 AdornerLayer 来避免在屏幕外剪裁我的装饰器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3401072/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com