我有一个自定义TextBox,它覆盖了OnRender
方法。不幸的是,当我向网格添加超过143-145个TextBox时,OnRender
无法正常工作。
这是一个带有160个TextBox的窗口在wpf设计器中的样子。每个TextBox在OnRender
方法中将边框画笔设置为红色。对于文本框的最后一列,OnRender
不再起作用。
render test example http://s3.postimage.org/id6jvq09n/render_Test_Example.png
问题不是绑定到wpf设计器,在运行时也是如此。有趣的是,如果您删除设计器中的一个组件,或者在渲染后在运行时删除它,那么所有其他控件都会突然发挥作用。
示例代码:
答案 0 :(得分:0)
你的方法应该是勉强建议的方法。这种行为是标准的,甚至由WPF附带的DataGridTextColumn
使用。来自MSDN:
DataGridTextColumn creates a TextBlock element in the non-editing mode and a TextBox element in the editing mode.
此外,正如评论中许多其他用户所建议的那样,不应覆盖OnRender
来调整控件的视觉外观。在WPF中,可以通过调整控件的Style
和/或Template
来完成对控件外观的更改。以下样式会导致与OnRender
覆盖完全相同的外观更改:
<Style TargetType="TextBox">
<Setter Property="BorderBrush" Value="Red" />
</Style>
当您扩展控件的功能和/或目的时,您应该只“导出并覆盖”,并且您的示例中没有任何内容表明您正在执行的操作。
此外,您的RenderTestPanel.xaml暗示您所做的只是创建由WPF提供的数据网格。我强烈建议使用开箱即用的DataGrid
,为DataGridTextColumn
设置风格,你可能(可能)用更少的代码完成你的目标,完全在XAML中。
答案 1 :(得分:0)
我能够解决一个非常类似的问题。 我在这里发布了决议: https://stackoverflow.com/a/40605635/5823234