![]() |
1
7
您可以通过修改模板来访问DataGrid的内部ScrollViewer。尽管通常不会将事件处理程序放在模板中的代码后面,但如果以内联方式声明模板,则可以像将其附加到DataGrid本身时那样处理事件处理程序。这是从Blend生成的默认模板,包括在ScrollViewer上为RequestBringintoView事件添加的处理程序:
|
![]() |
2
27
定义一个
XAML
处理程序
|
![]() |
3
9
我花了更多的时间来研究这个问题,因为我的第一个解决方案不起作用。 然而,约翰的回答几乎是好的。诀窍是在RequestBringInToView事件到达ScrollViewer之前捕获它,以便标记它已处理过的事件。 如果不需要优化整个模板,可以使用以下代码:
我们使用ScrollContentPresenter,因为它刚好位于可视化树中ScrollViewer的下方。 希望这有帮助! |
![]() |
4
4
我也有同样的问题,简的回答帮助了我。唯一缺少的是ScrollContentPresenter只能在发生已加载事件后找到。我创建了一个从DataGrid继承的扩展的DataGrid类,它具有附加的AutoScroll属性来控制网格是否自动滚动。 这是课程:
以下是您如何使用它:
|
![]() |
5
3
我和鲁米特有同样的问题,但找到了解决办法。 我想如果我能找到区分鼠标点击和箭头键的方法,那么我就可以相应地设置e.handled。 经过一些实验,我发现e.originalsource根据鼠标或箭头键而改变。对于鼠标单击,将调用一次RequestBringintoView的处理程序,E.OriginalSource的类型为DataGridCell。对于箭头键,处理程序被调用两次,E.OriginalSource的类型是DataGridRow,然后是DataGridCell。 我的处理程序的代码是:
这看起来有点像黑客,但对我很有用。 |
![]() |
6
1
我不确定这是否有效,但这里有一个基于一些调查的想法,是在使用reflector的数据报源代码中进行的: 1/创建继承DataGridCellsPanel的类。这是数据报内部用于排列单元格的面板。 2/用空方法重写BringIndexIntoView方法(不调用基方法) 3/在XAML中设置itemspanelTemplate属性:
似乎在发生mousedown事件时,有时会调用面板的bringIndexIntoView方法来执行自动滚动。用一个“不行动”代替它可能会起作用。 我没时间测试这个解决方案,请告诉我们它是否有效。 |
![]() |
7
0
以下是我的工作(在尝试了迄今为止所有不太复杂的“答案”之后):
scrollViewer.canContentScroll=“false”似乎令人难以置信地违反直觉… |
![]() |
8
0
L33 T方式:
注意这个 能够 干扰第三方控制。 |
![]() |
Kryptonit364 · 在DataGrid中隐藏调整大小和选择列 2 年前 |
![]() |
hassan Ma · 从顶部将文本插入WPF文本块 2 年前 |
![]() |
Arijit · 移动画布内绘制的矩形 2 年前 |
![]() |
juraj14466 · C#WPF实时图表将点渲染为图像 2 年前 |