Silverlight - 缩放滚动条视图内容时滚动条调整大小问题

发布于 2024-09-17 08:11:38 字数 1785 浏览 2 评论 0原文

我在 silverlight 缩放和平移功能方面遇到了奇怪的问题。我有滚动查看器,在他的边框内,在边框内是我的主要内容(一些网格,文本框等......) 我的 XAML 看起来像这样:

XAML:

 <Grid x:Name="Root" Background="Black">
    <ScrollViewer x:Name="Scroller" HorizontalScrollBarVisibility="Visible">
        <Border x:Name="Sizer">
            <Grid x:Name="LayoutRoot" ShowGridLines="True" RenderTransformOrigin="0.5,0.5">                   
               ... my content which is been scaled ...
            </Grid>
        </Border>
    </ScrollViewer>
</Grid>

缩放效果非常好。但我尝试在放大时实现平移功能,以便我可以浏览缩放的内容。我的缩放部分如下所示:

protected override void OnMouseWheel(MouseWheelEventArgs e)
    {
        base.OnMouseWheel(e);           

        if (e.Delta > 0)
        {
            scale.ScaleX += 0.2;
            scale.ScaleY += 0.2;                
        }
        else if(e.Delta < 0 && (scale.ScaleX > 1 && scale.ScaleY > 1))
        {
            scale.ScaleX -= 0.2;
            scale.ScaleY -= 0.2;                
        }

        Sizer.Width = Sizer.Width * scale.ScaleX;
        Sizer.Height = Sizer.Height * scale.ScaleY;

在上面的最后两行代码中,我还调整了 Sizer 宽度和高度(即 ScrollViewer 中的边框)的大小,因为我不想自动更改 Border 的大小,以便 ScrollViewer 可以调整自己的大小。但有问题。滚动条没有捕获缩放后的所有内容。包含缩放内容的网格大小和 ScrollViewer 在调试期间是相同的:

Sizer_H : 1153,20007324219, LayoutRoot_H : 1153,20004582405, Sizer_W : 2271,60009765625, LayoutRoot_W : 2271,60009026527
Sizer_H : 1614,20007324219, LayoutRoot_H : 1614,20010995865, Sizer_W : 3180,80029296875, LayoutRoot_W : 3180,8002166748
Sizer_H : 2582,40014648438, LayoutRoot_H : 2582,40023088455, Sizer_W : 5089,6005859375, LayoutRoot_W : 5089,6004550457

我试图找出我做错的地方..但没有运气..

谢谢!

I'm having strange problem with silverlight zoom and pan feature. I'm having scrollviewer, inside him border, and inside border my main content (some grids, text boxs etc..)
My XAML is looking something like this :

XAML :

 <Grid x:Name="Root" Background="Black">
    <ScrollViewer x:Name="Scroller" HorizontalScrollBarVisibility="Visible">
        <Border x:Name="Sizer">
            <Grid x:Name="LayoutRoot" ShowGridLines="True" RenderTransformOrigin="0.5,0.5">                   
               ... my content which is been scaled ...
            </Grid>
        </Border>
    </ScrollViewer>
</Grid>

Scaling is working excellent. But I tried to implement also pan feature when I zoom in, so that I can go across zoomed content. My zooming part is looking like this :

protected override void OnMouseWheel(MouseWheelEventArgs e)
    {
        base.OnMouseWheel(e);           

        if (e.Delta > 0)
        {
            scale.ScaleX += 0.2;
            scale.ScaleY += 0.2;                
        }
        else if(e.Delta < 0 && (scale.ScaleX > 1 && scale.ScaleY > 1))
        {
            scale.ScaleX -= 0.2;
            scale.ScaleY -= 0.2;                
        }

        Sizer.Width = Sizer.Width * scale.ScaleX;
        Sizer.Height = Sizer.Height * scale.ScaleY;

In the above code at two last line, I'm also resizing Sizer Width and Height (that's border in ScrollViewer) because I want't to automaticly change size of Border so that ScrollViewer can resize himself. But there is problem. Scroll bars aren't catching all the content after the scale.. Sizes of Grid which consist scaled content and ScrollViewer are same during debug :

Sizer_H : 1153,20007324219, LayoutRoot_H : 1153,20004582405, Sizer_W : 2271,60009765625, LayoutRoot_W : 2271,60009026527
Sizer_H : 1614,20007324219, LayoutRoot_H : 1614,20010995865, Sizer_W : 3180,80029296875, LayoutRoot_W : 3180,8002166748
Sizer_H : 2582,40014648438, LayoutRoot_H : 2582,40023088455, Sizer_W : 5089,6005859375, LayoutRoot_W : 5089,6004550457

I'm trying to figure it out where I'm doing wrong.. but with no luck..

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文