UWP:如果缩放系数大于 1,SCrollViewer.ChangeView 不滚动
UWP: SCrollViewer.ChangeView doesn't scroll if zoom factor is greater than 1
我在 Windows 10 的 UWP 应用程序中添加了一个 ScrollViewer。
我想将它用于缩放和平移。
这是我的 XAML:
<Page
x:Class="LiquidTextUWP.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:lt="using:LiquidTextUWP.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden"
ZoomMode="Enabled" Background="DarkSeaGreen" Name="ScrollArea"
Width="10000" Height="10000">
<Grid Background="LightGray" Name="Workspace">
<!-- here I put all my other controls -->
</Grid>
</ScrollViewer>
</Page>
对于平移,我为 PointerMoved 事件添加了一个小事件处理程序,如下所示:
private double previousX = 0;
public void OnPointerMoved(object sender, PointerRoutedEventArgs e)
{
if (!(sender is ScrollViewer scrollViewer))
return;
PointerPoint pp = e.GetCurrentPoint(null);
double deltaX = pp.Position.X - previousX;
previousDeltaX = pp.Position.X
bool res = scrollViewer.ChangeView(scrollViewer.HorizontalOffset - deltaX, null, null);
e.Handled = true;
}
它在 scrollViewer.ZoomFactor > 1
.
时运行良好(即它实际上水平平移,并且 res = true
)
当 scrollViewer.ZoomFactor < 1
时,它什么也不做(和 res = false
)。
编辑:
我还注意到,当 scrollViewer.ZoomFactor < 1
时,属性 ScrollableWidth
和 ScrollableHeight
变为 0,而当 scrollViewer.ZoomFactor > 1
时,属性 ScrollableWidth
和 ScrollableHeight
为阳性。
当缩放系数小于 1 时,如何使 ChangeView 的 ScrollViewer return 为真?
我认为你必须将 ScrollViewer.ZoomMode
设置为 Enabled
。
此致
为了以后遇到这个话题的人,我是这样解决的:
我必须将 ScrollArea
的 Width/Height 设置为小于 Workspace
元素的 Width/Height。
我的问题是将 ScrollArea
的 Width/Height 设置为 10000。如果我改为设置为 Auto(或不表示),而是将 Width/Height 设置为Workspace
到10000,就达到了我想要的效果
我在 Windows 10 的 UWP 应用程序中添加了一个 ScrollViewer。
我想将它用于缩放和平移。
这是我的 XAML:
<Page
x:Class="LiquidTextUWP.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:lt="using:LiquidTextUWP.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden"
ZoomMode="Enabled" Background="DarkSeaGreen" Name="ScrollArea"
Width="10000" Height="10000">
<Grid Background="LightGray" Name="Workspace">
<!-- here I put all my other controls -->
</Grid>
</ScrollViewer>
</Page>
对于平移,我为 PointerMoved 事件添加了一个小事件处理程序,如下所示:
private double previousX = 0;
public void OnPointerMoved(object sender, PointerRoutedEventArgs e)
{
if (!(sender is ScrollViewer scrollViewer))
return;
PointerPoint pp = e.GetCurrentPoint(null);
double deltaX = pp.Position.X - previousX;
previousDeltaX = pp.Position.X
bool res = scrollViewer.ChangeView(scrollViewer.HorizontalOffset - deltaX, null, null);
e.Handled = true;
}
它在 scrollViewer.ZoomFactor > 1
.
res = true
)
当 scrollViewer.ZoomFactor < 1
时,它什么也不做(和 res = false
)。
编辑:
我还注意到,当 scrollViewer.ZoomFactor < 1
时,属性 ScrollableWidth
和 ScrollableHeight
变为 0,而当 scrollViewer.ZoomFactor > 1
时,属性 ScrollableWidth
和 ScrollableHeight
为阳性。
当缩放系数小于 1 时,如何使 ChangeView 的 ScrollViewer return 为真?
我认为你必须将 ScrollViewer.ZoomMode
设置为 Enabled
。
此致
为了以后遇到这个话题的人,我是这样解决的:
我必须将 ScrollArea
的 Width/Height 设置为小于 Workspace
元素的 Width/Height。
我的问题是将 ScrollArea
的 Width/Height 设置为 10000。如果我改为设置为 Auto(或不表示),而是将 Width/Height 设置为Workspace
到10000,就达到了我想要的效果