ItemsControl 调整大小时边框消失(使用“stretchpanel”)

2023-12-05

昨天我问如何让 ItemsControl 使其子项均匀分布在可用空间中;在愉快地阅读答案后,我写了(实际上是复制并调整了它)我自己的“stretchpanel”,它正是我想要的。然而,我的孩子应该在右侧有一个边框,只要孩子比其内容大,它就可以工作。一旦它变小,边框就会消失,我不知道为什么(因此,不修复它)。下面您可以找到我的视图和拉伸面板中覆盖方法的简化版本,使用this样品作为基础。预先非常感谢。

<Grid Background="Red" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.ColumnDefinitions>
  <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ItemsControl x:Name="HorizontalListBox" Background="Blue" HorizontalAlignment="Left" HorizontalContentAlignment="Left" >
  <ItemsControl.Items>
    <System:String>Test</System:String>
    <System:String>Test</System:String>
    <System:String>This demonstrates the problem exceptionally well</System:String>
    <System:String>Test</System:String>
    <System:String>Test</System:String>
  </ItemsControl.Items>
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <Controls:StretchPanel Orientation="Horizontal" HorizontalAlignment="Stretch"/>
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <Grid Background="Yellow" HorizontalAlignment="Stretch">
        <TextBlock Text="{Binding}" HorizontalAlignment="Stretch"/>
        <Border BorderBrush="Black" BorderThickness="0,0,1,0"/>
      </Grid>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>
protected override Size MeasureOverride(Size availableSize)
{
  var size = new Size();
  SetSide(ref size, GetSide(availableSize));
  foreach (UIElement child in Children)
  {
    child.Measure(availableSize);
    SetOtherSide(ref size, Math.Max(GetOtherSide(size), GetOtherSide(child.DesiredSize)));
  }
  _measureSize = size;
  return size;
}

protected override Size ArrangeOverride(Size finalSize)
{
  double offset = 0;
  var Side = GetSide(_measureSize) / Children.Count;
  var Rest = GetSide(_measureSize) % Children.Count;
  foreach (UIElement child in Children)
  {
    double side = Math.Floor(GetSide(_measureSize) / Children.Count);
    if (Rest > 0)
    {
      side++;
      Rest--;
    }
    var final = new Size();
    SetSide(ref final, side);
    SetOtherSide(ref final, GetOtherSide(finalSize));
    child.Arrange(new Rect(GetOffsetPoint(offset), final));
    offset += side;
  }
  return finalSize;
}

如果您像这样编写 StretchPanel ,它会工作,它以零宽度和高度测量其子元素:

public class StretchPanel : Panel
{
    protected override Size MeasureOverride(Size availableSize)
    {
        foreach (UIElement element in Children)
        {
            element.Measure(new Size());
        }

        return new Size();
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        for (int i = 0; i < Children.Count; i++)
        {
            int x1 = (int)(finalSize.Width / Children.Count * i);
            int x2 = (int)(finalSize.Width / Children.Count * (i + 1));
            Children[i].Arrange(new Rect(x1, 0, x2 - x1, finalSize.Height));
        }

        return finalSize;
    }
}

然后设置HorizontalAlignment="Stretch"(或者根本不设置它,因为这是默认值)在 ItemsControl 上。

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

ItemsControl 调整大小时边框消失(使用“stretchpanel”) 的相关文章

  • Boost 错误代码参考

    有谁知道在哪里可以找到升压错误代码的参考 特别是 异步套接字处理程序返回的错误代码 Google 和 grep 头文件已调为空 我从 Linux 上的 asio error hpp 中提取了错误值 顺便说一句 我仅使用标头 asio 而不是
  • VS2015 代码覆盖率不适用于 ASP.NET Core 1.0(以前称为 ASP.NET 5)中的测试

    我有一个 ASP NET Core 1 0 以前称为 ASP NET 5 解决方案 其中包含几个类库 包 和一个 ASP NET MVC6 项目 我有一个使用支持 Core 1 0 的新 XUnit 2 0 的测试库 然而 由于某种原因 当
  • 在 ASP.NET Core 中全局重用变量

    我必须强制这些变量在我想使用的每个变量上重用 这让我很困难 我需要创建一个类来定义这些变量并在整个程序中使用它们 我怎样才能做到这一点 string RootFolderName Uplaod string ProductPictureFo
  • asm、asm 易失性内存和破坏性内存之间的区别

    在实现无锁数据结构和定时代码时 通常需要抑制编译器的优化 通常人们使用asm volatile with memory在 clobber 列表中 但有时你会看到asm volatile或者只是一个简单的asm破坏记忆 这些不同的语句对代码生
  • 改装和授权标头

    目前 我正在向我的请求添加授权标头 如下所示 文件 SomeFile cs public interface ITestApi Get api test id Task
  • 值类型数组如何存储在 .NET 对象堆中?

    在 NET中 诸如int之类的值类型对象存储在内存中 引用类型对象需要为引用和对象单独分配内存 并且对象存储在 NET对象堆中 而Array是在堆中创建的 那么int 等值类型的数组如何存储在堆中呢 这是否意味着值类型对象可以存储在堆中而无
  • 使用 rhino 模拟进行 lambda 单元测试失败

    如果我有这个测试 Expect Call session Single
  • gcc 的错误?模板类中友元函数的访问控制问题

    我有一个模板类 并在类中定义了一个友元函数 include
  • C++ 访问嵌套类的私有成员

    标题可能有点误导 我有以下问题 我有一棵由叶子和内部节点组成的树 用户应该能够在叶子中存储任何信息and该树有一些方法可以获取一组用户定义的值 并且需要在恒定时间内 未摊销 访问相应的叶子 我提出了以下想法 但它不起作用 因为不幸的是我无法
  • 在 Visual Studio 2017 mac 上安装扩展 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试在 Visual Studio for Mac 上安装 Visual Studio Marketplace 扩展 但是 Vi
  • 在实体框架中不使用 Dispose 或 using()

    我一路上正在编写一个网络应用程序并学习实体框架 如果我做错了什么 我很好奇 我在查询时没有使用过 dispose 或 using 语句 我的存储库示例 public User GetUserById int sessionId var us
  • 从 Windows 选择声音并播放它们

    我有一个 WinForms 应用程序 该应用程序有一个 首选项 部分 用户可以在其中选择显示警报时播放哪些声音 是否可以有一个组合框 用户可以从 Windows 存储的声音中进行选择 例如 紧急停止 紧急蜂鸣 等 这些可以在 控制面板 gt
  • 静态成员函数中的封闭类的 C++ 类型

    我认为这是完全不可能的 但如果呢 在任何版本的 C 中 是否有可能以某种方式获取静态成员函数中封闭类的类型 class Impossible public static void Fun typedef Impossible Enclosi
  • 使用 C# 在 XML 文档中查找特定值的好方法是什么?

    我正在调用 Oracle 公开的 WebService 它接受 ItemID 的输入并向我返回相应的 Item Number 我想获取从响应中包含的 XML 返回的项目编号 XML 看起来像这样
  • boost::bind 会导致开销吗?

    我目前正在从事网络软件方面的工作 它有一个主要类 server这显然代表一个服务器实例 A server实例可以发送请求 并通过回调通知用户响应 代码如下 class server public typedef boost function
  • 获取上下文菜单的控制

    我有一个如下所示的上下文菜单 A 1 2 3 选择 1 2 或 3 后 我需要访问调用上下文菜单的对象 意思是如果这是 textbox1 的上下文菜单 那么我需要访问该对象 我该怎么做 忘了说了 这是一个WPF应用程序 所以我使用 Syst
  • SQlite 查询 - 如何检索多列数据?

    我很难在网上找到一个关于使用 xcode 和 cocos2dx 从 SQlite DB 获取多个值的工作示例 这是我的sql查询 char sql query 100 sprintf sql query SELECT FROM SQList
  • 类型与创建 CLR 存储过程不匹配

    我在程序集中有一个如下所示的方法 namespace MyNameSpace public class MyClass Microsoft SqlServer Server SqlProcedure public static void M
  • 系统.安全.加密与 PCLCrypto

    我们正在删除系统中的许多共享功能并将其移植到 PCL 库中 我在使用 PCLCrypto 时遇到问题 我正在获取数据库中的一些现有数据 并尝试使用相同的算法对其进行解密 我得到了值 但末尾有 16 个额外字节 这些字节都是垃圾 参见下面的代
  • Interlocked.CompareExchange 可以抛出 NullReferenceException 吗?

    From https msdn microsoft com en us library bb297966 v vs 110 aspx https msdn microsoft com en us library bb297966 v vs

随机推荐

  • Apex 5:动态操作设置页面项值

    使用新的 apex 5 版本时 我遇到以下问题 无法通过plsql获取页面项的值 nv P2 TO P2 FROM lt lt lt DOESN T WORK I Yes P FROM exist and verified nv P2 TO
  • SPSS 按行分组并将字符串连接成一个变量

    我试图导出 SPSS 元数据使用 SPSS 语法转换为自定义格式 具有值标签的数据集包含一个或多个变量标签 但是 现在我想将每个变量的值标签连接成一个字符串 例如对于变量SEX将行组合或分组F Female and M Male转化为一个变
  • 在 R 中的 ggplot2 地图上叠加栅格图层?

    我正在尝试将栅格图层叠加到 ggplot 中的地图上 栅格图层包含卫星标签中每个时间点的似然面 我还想在栅格图层上设置累积概率 95 75 50 我已经弄清楚如何在 ggplot 地图上显示栅格图层 但坐标未彼此对齐 我尝试使每个都有相同的
  • 如何在 Netbeans 中使用 -g 选项进行编译?

    调试时 我收到一条有关异常的警告消息 variable info not available compiled without g 如何在 netbeans 中设置使用 g 进行编译 thanks 据我所知你的own代码是用调试信息编译的
  • MVC3 EF 工作单元 + 通用存储库 + Ninject

    我是 MVC3 的新手 一直在关注 asp net 网站上的精彩教程 然而 我不太清楚如何将工作单元和通用存储库模式与 Ninject 结合使用 我使用本教程作为起点 http www asp net mvc tutorials getti
  • 使用设备策略控制器在后台升级应用程序

    我有一个正在运行的 DPC 应用程序 它是设备所有者 我已在两台不同的 Android 6 0 1 设备上尝试过此操作 以排除任何设备 制造商问题 I used adb shell dpm set device owner com exam
  • VB.NET 中默认启用选项 Strict

    每当我创建一个新的 VB NET 程序时 我必须进入该项目的属性并将 Option strict 设置为打开 我可以这样做一次 这样每次创建新项目时它都是默认的吗 在 Visual Studio 中 转到菜单Tools gt Options
  • 训练后,TensorFlow 始终会收敛到所有项目的相同输出

    这是我正在使用的代码片段 import tensorflow as tf import numpy as np from PIL import Image from os import listdir nodes l1 500 nodes
  • Log4j2 覆盖过去一天的日志文件

    我正在使用 Log4j2 版本 2 3 log4j2 xml 如下所示
  • 使第二行填补上面的空白

    一个简单的 html css 问题 请看这个example 我希望第二行中的块能够填补它们上方的空白 除了使用 JavaScript 之外还有什么办法吗 block float left width 200px height 200px b
  • Lasagne 与 Theano 可能版本不匹配(Windows)

    所以我终于设法让 theano 启动并在 GPU 上运行this指导 测试代码运行良好 告诉我它使用了 GPU 耶 然后我想尝试一下并遵循this数字识别 CNN 训练指南 问题是 我从烤宽面条调用 theano 的方式中收到错误 我猜这里
  • 有没有办法进行内联多值比较?

    我什至觉得问这个问题很愚蠢 因为这看起来很微不足道 但我的大脑却让我失望了 如果我有以下内容 let a b c 1 1 1 有没有一种优雅的方法来确定 a b 和 c 是否都具有相同的值 就像是 let result a b c 这会失败
  • python中如何检查两个字符串是否有交集?

    例如 a abcdefg b krtol 它们没有交集 c hflsfjg 则a和c有交集 检查这个最简单的方法是什么 只需要一个 True 或 False 结果 def hasIntersection a b return not set
  • 使用powershell登录后如何从网站获取表数据?

    我的公司希望我从他们的内部网站获取数据 对其进行组织 然后将其发送到数据库 数据显示在您在站点内导航到的表格上 我想将这些字段提取到文件或内存中以进行进一步处理 到目前为止 我可以通过获取提交登录按钮的 ID 并传递我的用户名 密码来在 p
  • ffmpeg通过python子进程无法找到相机

    这里有一个奇怪的问题 我使用这个命令通过 ffmpeg 捕获我的网络摄像头 通过 Windows 上的 cmd ffmpeg y t 300 rtbufsize 1024M f dshow i video Lenovo EasyCamera
  • 视图需要相互依赖的逻辑:没有模型是否可行?

    我正在尝试编写一些 Oracle 11g SQL 但遇到了一些先有鸡还是先有蛋的问题 我正在寻找类似电子表格的行为 我找到了一个使用 Oracle 的解决方案MODEL条款 但性能并不好 所以我想知道是否 非MODEL 解决方案在技术上甚至
  • 在 django 项目中导入应用程序

    我在 django 项目中的另一个应用程序中导入应用程序时遇到问题 我知道有几个关于这个主题的问题 asnwsers 相信我 我读了很多 甚至还有一些关于 python import 的 这是我的项目树 我将放置真实的文件夹名称 was f
  • 将 URL 变量传递到 xsl 中

    是否可以将 URL 变量传递到 xsl xml 中 例如 http www somedomain com index aspx myVar test myVar2 anotherTest 我希望能够在 xsl 文件的逻辑中使用 myVar
  • 在 Nifi 中从 Avro Schema 创建 Postgresql 表

    使用 InferAvroSchema 我获得了文件的 Avro 架构 我想使用此 Avro 架构在 PostregSql 中创建一个表 我必须使用哪个处理器 我使用 GetFile gt InferAvroSchema gt 我想从此架构创
  • ItemsControl 调整大小时边框消失(使用“stretchpanel”)

    昨天我问如何让 ItemsControl 使其子项均匀分布在可用空间中 在愉快地阅读答案后 我写了 实际上是复制并调整了它 我自己的 stretchpanel 它正是我想要的 然而 我的孩子应该在右侧有一个边框 只要孩子比其内容大 它就可以