获取WPF中控件的可见大小

2024-04-12

我有一个未完全显示的控件(通过减小窗口大小)。 但该控件的 ActualWidth 和 RenderSize/DesiredSize 仍然显示其总大小。 我编写了下一个代码,但它忽略了窗口的滚动条宽度,看起来很丑。 也许有一种方法可以以更优雅的方式获得可见的控件大小?

    private static double GetVisibleWidth(UIElement element, FrameworkElement container)
    {
        var visibleBounds =
            element.TransformToAncestor(container)
                .TransformBounds(new Rect(new Point(0, 0), element.RenderSize));

        double visibleWidth = element.RenderSize.Width;
        if (container != null)
        {
            visibleWidth = Math.Min(container.ActualWidth - visibleBounds.X, visibleWidth);
        }

        return visibleWidth;
    }

LayoutInformation.GetLayoutClip https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.layoutinformation.getlayoutclip(v=vs.110).aspx可能就是你所需要的。

返回表示元素可见区域的几何图形。

但请注意,如果element.IsArrangeValid && element.IsMeasureValid == false,这将返回null。您可以使用以下方法:

private Size GetVisibleSize(FrameworkElement element)
{
    Rect? bounds = LayoutInformation.GetLayoutClip(element)?.Bounds;
    if (bounds == null)
    {
        return new Size(element.ActualWidth, element.ActualHeight);
    }
    return new Size(bounds.Value.Width, bounds.Value.Height);
}

但是,当您的元素位于滚动查看器内时,这将不起作用,因为它在技术上没有被剪切。

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

获取WPF中控件的可见大小 的相关文章

随机推荐

  • IoC 容器本身的单元测试

    我认为以前没有人问过这个问题 尽管搜索这样的术语确实很困难单元测试ioc容器并且没有找到有关如何实现 IoC 以便执行单元测试的问题 我想对 IoC 容器本身进行单元测试 基本上是因为有时我会遇到容器问题 就像应用程序的任何其他部分一样 并
  • 使用类型提示时无法传递 null 参数

    以下代码 class Type function foo Type t foo null 运行时失败 PHP 致命错误 传递给 foo 的参数 1 不能为 null 为什么不允许像其他语言一样传递null PHP 7 1 或更高版本 201
  • 如何使用adb shell输入来输入&符号?

    adb shell input text 不起作用 也不行adb shell input keyevent KEYCODE AMPERSAND 相关问题 7789826 https stackoverflow com questions 7
  • Android约束布局水平划分

    我正在处理一个 Android 项目 我使用了ConstraintLayout 我想将布局设计为两个保持水平线的块 每个块将获得 50 的宽度 我怎样才能做到这一点ConstraintLayout 有两种方法可以做到这一点 使用链约束 使用
  • 如何在卡西欧 fx-991ES 计算器中计算 Mod b

    有谁知道如何在卡西欧 fx 991ES 计算器中计算 Mod b 谢谢 该计算器没有任何模函数 然而 有一种非常简单的方法可以使用显示模式来计算模数ab c 而不是传统的d c 如何切换显示模式ab c Go to settings Shi
  • 如何在 C# 中获取文件夹大小? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在 C 中获取目录大小 目录中的文件 https stackoverflow com questions 1118568 how do i get a directory size files i
  • Itext 7 - PdfReader 未使用所有者密码打开错误

    I am using This example https developers itextpdf com content itext 7 jump start tutorial examples chapter 5 for the lat
  • 迭代数组时应该使用 for-of 还是 forEach? [复制]

    这个问题在这里已经有答案了 另外 这是风格问题还是功能问题 这是一个偏好问题还是一个更好 我试图理解 for of 的目的 通常我使用 let iterable 10 20 30 iterable forEach val gt consol
  • 将 WAV 文件转换为频谱图

    嗨 我对这件事很陌生 所以请耐心等待 我正在尝试将 WAV 文件转换为频谱图 但不确定如何开始 我读到一些内容 说要读取 PCM 数据 我认为是我的 WAV 文件 并将其存储在 WavReader 类的数组中 然后再对其应用 FFT 并将其
  • django:gettext 并强制转换为 unicode

    我的 Django 应用程序中有以下代码 class Status object def init self id desc self id id self desc desc def unicode self return self de
  • 将所有选定的项目从 ListView 复制到 ListView 2

    如何将多个项目从 ListView 复制到另一个 现在我正在这样做 procedure TForm1 CopyToRightClick Sender TObject var selected TListItem addItems TList
  • 主动调整主窗口内小部件的大小

    I have a few widgets in a main window i want the user to be able to resize the widgets inside the window as they please
  • 替换 DataColumn 中的值

    循环行时如何替换列值 我的数据表有两列 我想替换每一行第一列的值 我无法获取或设置列值 到目前为止 我只能访问 DefaultValue 和 ColumnName 等 即使创建新的 DataColumn 我也无法设置其值 感觉我在这里缺少一
  • 如何使用批处理文件从系统配置中删除环境变量

    我需要从客户端工作站中删除系统变量 我有 500 多个客户端 所以我想提供批处理文件给用户自己运行以删除系统变量 You may want to make these two permanent with setx but obviousl
  • 如何在Linux shell脚本中插入新行? [复制]

    这个问题在这里已经有答案了 我想在多个 echo 语句之间插入一个新行 我努力了echo hello n 但它不起作用 正在打印 n 我想要这样的期望输出 Create the snapshots Snapshot created 在之间插
  • 如何在不闪烁的情况下更新 Shiny 中的值?

    我每秒都会更新一个闪亮的文本输出 该文本输出是从 SQL 数据库读取的 这只需要一些时间 在仪表板中 我只想看看输出如何变化而没有花哨的动画 闪烁 是否可以在等待更新时删除动画并仅显示文本 这是一些代码示例 您可以在其中看到更新的闪烁 ui
  • C++ 对象将模板化函数和参数保留为成员以便稍后调用

    我有课Door实现一个方法LockCheck 和一个类Stove用一种方法BurnerCheck 我想要上课House作为构造函数参数Door LockCheck or Stove BurnerCheck以及给定函数的一组未知参数 Hous
  • Xcode 7 - 如何删除 ld: warning: -read_only_relocs 不能与 x86_64 一起使用

    我最近更新到了 Xcode 7 现在在编译时收到以下警告 ld 警告 read only relocs 不能与 x86 64 一起使用 我认为我没有更改构建设置或代码中的任何内容来创建它 有谁知道导致此警告的原因以及如何删除它 我已经为感兴
  • 用于组合垂直/内联字段的 Bootstrap 复杂表单布局

    我对 Bootstrap 很陌生 但我的技能增长很快 也很欣赏它 我需要构建一个相当复杂的页面 其中包含大量表单元素 包括多个地址填写组件 我在这里附上了我想要的基本设计的图像 但似乎无法使用我可用的基本表单设计元素来实现它 我觉得我的方法
  • 获取WPF中控件的可见大小

    我有一个未完全显示的控件 通过减小窗口大小 但该控件的 ActualWidth 和 RenderSize DesiredSize 仍然显示其总大小 我编写了下一个代码 但它忽略了窗口的滚动条宽度 看起来很丑 也许有一种方法可以以更优雅的方式