无论出于何种原因,我有ItemsControl
在Y坐标中翻转,其中我有一个ScrollViewer
:
<ItemsControl ...>
...
<ItemsControl.LayoutTransform>
<ScaleTransform ScaleY="-1" />
</ItemsControl.LayoutTransform>
<ItemsControl.Template>
<ControlTemplate>
<ScrollViewer Focusable="False" Padding="{TemplateBinding Control.Padding}">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
</ScrollViewer>
</ControlTemplate>
</ItemsControl.Template>
...
</ItemsControl>
每个DataTemplate都有类似的转换,因此文本看起来正确。
这产生的一个问题是滚动被颠倒了。无论如何反转滚动方向?或者以某种方式自己进行计算,而不是默认的滚动行为。我怎样才能做到这一点?
答案 0 :(得分:1)
如果将ItemsControl的LayoutTransform移动到ItemsPresenter怎么办?然后滚动查看器在翻转之外。
<ItemsControl ...>
...
<ItemsControl.Template>
<ControlTemplate>
<ScrollViewer Focusable="False" Padding="{TemplateBinding Control.Padding}">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}">
<ItemsPresenter.LayoutTransform>
<ScaleTransform ScaleY="-1" />
</ItemsPresenter.LayoutTransform>
</ItemsPresenter>
</ScrollViewer>
</ControlTemplate>
</ItemsControl.Template>
...
</ItemsControl>
好的......所以这对你不起作用。
如何制作自己的滚动查看器并覆盖OnPreviewMouseWheel以反转鼠标滚轮的增量变化?
public class ScrollViewerInvert : System.Windows.Controls.ScrollViewer
{
protected override void OnPreviewMouseWheel(MouseWheelEventArgs e)
{
if (e.Delta != 0)
e = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta * -1);
base.OnPreviewMouseWheel(e);
}
}