gpt4 book ai didi

c# - OnRender 方法不适用于超过 144 个控件

转载 作者:太空宇宙 更新时间:2023-11-03 16:40:48 26 4
gpt4 key购买 nike

我有一个自定义的 TextBox,它覆盖了 OnRender 方法。不幸的是,当我向网格添加超过 143-145 个文本框时,OnRender 无法正常工作。

这是带有 160 个文本框的窗口在 wpf 设计器中的样子。每个 TextBox 在 OnRender 方法中将边框刷设置为红色。对于文本框的最后一列,OnRender 不再起作用。

render test example http://s3.postimage.org/id6jvq09n/render_Test_Example.png

问题不限于 wpf 设计器,在运行时也会发生同样的情况。有趣的是,如果您在设计器中删除一个组件或在渲染后在运行时删除它,那么所有其他控件都会突然起作用。

示例代码:

MytextBox.cs
RenderTestPanel.xaml
RenderTestPanel.xaml.cs

最佳答案

您的方法应该是 chibacity 建议的方法。这种类型的行为是标准的,甚至被 DataGridTextColumn 使用随 WPF 一起提供。来自 MSDN:

DataGridTextColumn 在非编辑模式下创建一个 TextBlock 元素,在编辑模式下创建一个 TextBox 元素。

此外,正如许多其他用户在评论中所建议的那样,您不应重写 OnRender 来调整控件的视觉外观。在 WPF 中,可以通过调整控件的 Style 和/或 Template 来更改控件的视觉外观。以下样式会导致与您的 OnRender 覆盖完全相同的外观变化:

<Style TargetType="TextBox">
<Setter Property="BorderBrush" Value="Red" />
</Style>

只有在扩展控件的功能和/或目的时才应该“派生和覆盖”,并且您的示例中没有任何内容表明您正在做的事情。

此外,您的 RenderTestPanel.xaml意味着您所做的只是创建一个由 WPF 提供的数据网格。我强烈建议使用开箱即用的 DataGrid,为 DataGridTextColumn 设置样式,您将(可能)用更少的代码完全在 XAML 中完成您的目标。

关于c# - OnRender 方法不适用于超过 144 个控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7610608/

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