Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何让内部有矩形的ScrollViewer在到达矩形末端时停止滚动?_C#_Windows Phone 7_Xaml - Fatal编程技术网

C# 如何让内部有矩形的ScrollViewer在到达矩形末端时停止滚动?

C# 如何让内部有矩形的ScrollViewer在到达矩形末端时停止滚动?,c#,windows-phone-7,xaml,C#,Windows Phone 7,Xaml,我在ScrollViewer中创建了一个矩形,如下所示 <ScrollViewer ManipulationMode="Control" x:Name="songScrollViewer" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Disabled" Height="270" VerticalAlignment="Center" Width="728" Canvas.Top="20" d:L

我在ScrollViewer中创建了一个矩形,如下所示

<ScrollViewer ManipulationMode="Control" x:Name="songScrollViewer"  HorizontalScrollBarVisibility="Visible"  VerticalScrollBarVisibility="Disabled" Height="270" VerticalAlignment="Center" Width="728" Canvas.Top="20" d:LayoutOverrides="HorizontalMargin"   >
  <Rectangle x:Name="musicBG" Fill="#FF0692FD"/>
</ScrollViewer>
但是,在滚动scrollViewer时,它允许我将矩形滚动到屏幕之外

例如,当我将矩形移动到我想移动的地方时,这行代码给出了以下值

if (songScrollViewer.HorizontalOffset > songScrollViewer.ScrollableWidth)
HorizontalOffset的值约为1200,ScrollableWidth的值约为2900

如何才能正确地执行此操作,使矩形不会完全从屏幕上滚动

我希望大约1200的水平偏移只会将矩形推到其目标的一半,而不会使它开始离开屏幕

回答:

在经历了许多挫折之后,我能够通过使用画布而不是边框或矩形来解决这个问题。 如果有人能解释为什么会出现此问题,如果有一个处理器密集度较低的控件比canvas更好,我将给予分数。

编辑:屏幕截图:

错误代码:

<ScrollViewer ManipulationMode="Control" x:Name="songScrollViewer" Width="720"  HorizontalScrollBarVisibility="Visible"  VerticalScrollBarVisibility="Disabled" Height="270" VerticalAlignment="Top" Canvas.Top="20" HorizontalAlignment="Left"   >
                                    <Border x:Name="musicBG"   Background="#FF0692FD" VerticalAlignment="Top" HorizontalAlignment="Left" Height="270" />

            </ScrollViewer>

带有错误代码的错误滚动的图像:

良好的工作代码:

<ScrollViewer ManipulationMode="Control" x:Name="songScrollViewer" Width="720"  HorizontalScrollBarVisibility="Visible"  VerticalScrollBarVisibility="Disabled" Height="270" VerticalAlignment="Top" Canvas.Top="20" HorizontalAlignment="Left"   >
                <Canvas x:Name="musicBG"  Background ="#FF0692FD" Height="270" >
                    <Border   Background="#FF0692FD" VerticalAlignment="Top" HorizontalAlignment="Left" Height="270" />
                </Canvas>
            </ScrollViewer>

好卷轴:注意,右下角显示的是170秒,而不是坏卷轴中较小的118秒。
我相信你是对的,wp7不会渲染大于2048像素的形状。因此,它滚动页面的原因是因为它将页面视为比2048大,但您只能看到2048px的宽度,并且它只是滚动到矩形的“幽灵”部分


我不确定你是否可以覆盖它,但我能想到的最好的解决方案(不覆盖)是将你的矩形分割成小于2000的卡盘(为了安全起见),然后在滚动查看器的水平堆栈面板中无缝显示它们。问题在于,根据您的编码方式,此解决方案可能很难实现;但是,在显示它时,您可能只能在ViewModel中拆分它,而您的逻辑只能将其视为一大块。

如果您想将所描述的内容向上投射一个屏幕快照,以帮助可视化,这样我就可以确定您要实现的目标,那么是的,您应该能够使用已经尝试过的任何对象,但是您可能需要将大小绑定到ScrollViewer的视口,甚至可能不需要偏移。目前,虽然很难从您的描述中看到它,但我相信我们可以解决它。这非常奇怪,它工作得非常完美,直到矩形变大超过2000,然后当您滚动到最后时,它开始将它越来越远离屏幕。你引起了我的好奇心……@methodMan这让我想起了Actionscript中的一个限制,形状不能大于2048像素或类似的东西。但是,与此不同的副作用。
<ScrollViewer ManipulationMode="Control" x:Name="songScrollViewer" Width="720"  HorizontalScrollBarVisibility="Visible"  VerticalScrollBarVisibility="Disabled" Height="270" VerticalAlignment="Top" Canvas.Top="20" HorizontalAlignment="Left"   >
                <Canvas x:Name="musicBG"  Background ="#FF0692FD" Height="270" >
                    <Border   Background="#FF0692FD" VerticalAlignment="Top" HorizontalAlignment="Left" Height="270" />
                </Canvas>
            </ScrollViewer>