Windows phone 7 类似内置WP7的图像/照片库

Windows phone 7 类似内置WP7的图像/照片库,windows-phone-7,Windows Phone 7,我正在寻找Windows Phone 7的照片库。它的外观和工作原理与内置的照片查看器相同(使用flick动作滑动照片,使用挤压和拖动调整大小)。当您轻弹图像时,您可以看到它滑到下一个图像…并将列表捕捉到该图像 我已经为图像构建了调整大小和拖动功能。我只是不知道如何创建实际的照片滑块 谁能给我指出正确的方向吗 我尝试过的事情: Pivot Viewer(无法工作,因为它会干扰图像的拖动功能,无法禁用Pivot Viewer触摸) 普通列表框(找不到如何捕捉到当前图像) 提前感谢使用水平方向的

我正在寻找Windows Phone 7的照片库。它的外观和工作原理与内置的照片查看器相同(使用flick动作滑动照片,使用挤压和拖动调整大小)。当您轻弹图像时,您可以看到它滑到下一个图像…并将列表捕捉到该图像

我已经为图像构建了调整大小和拖动功能。我只是不知道如何创建实际的照片滑块

谁能给我指出正确的方向吗

我尝试过的事情:

  • Pivot Viewer(无法工作,因为它会干扰图像的拖动功能,无法禁用Pivot Viewer触摸)

  • 普通列表框(找不到如何捕捉到当前图像)

提前感谢

使用水平方向的?当然,您必须手动检测用户操作并实现正确的响应(使用两个正确设置的故事板)


更好的方法是编写自己的自定义控件来查看图像。在Silverlight中,这是一个很好的开始。一旦您了解了如何将图像采集绑定到自定义控件,您所需要的就是处理当前选定项目上的用户手势。

实际上,我已经在我的一个应用程序中实现了您所说的内容

您需要使用Silverlight Control TOolkit的手势侦听器来捕获触摸时的拖拽和挤压

为图像定义合成变换,并设置其比例(收缩时)和偏移(拖动时)

显然,当图像未缩放时,拖动可触发转到下一图像

为了让它感觉更平滑,您可能需要在页面资源上定义一个故事板来使用(而不仅仅是设置偏移量)

我希望能有所帮助/


滑块效果的拖动处理程序伪代码:

<Canvas>
    <Image x:Name="imgImage" Source="{Binding ...}" Width="..." Height="...">
        <Image.RenderTransform>
            <CompositeTransform x:Name="imgImageTranslate" />
        </Image.RenderTransform>
    </Image>
</Canvas>

    private void GestureListener_DragCompleted(object sender, DragCompletedGestureEventArgs e)
    {
        if (e.Direction == System.Windows.Controls.Orientation.Horizontal)
        {
            var abs = Math.Abs(PANEL_DRAG_HORIZONTAL);
            if (abs > 75)
            {
                if (PANEL_DRAG_HORIZONTAL > 0) // MovePrevious;
                else //MoveNext();

                e.Handled = true;
            }
        }
    }


    double PANEL_DRAG_HORIZONTAL = 0;
    private void GestureListener_DragDelta(object sender, DragDeltaGestureEventArgs e)
    {
            if (e.Direction == System.Windows.Controls.Orientation.Horizontal)
            {
                PANEL_DRAG_HORIZONTAL += e.HorizontalChange;

                var baseLeft = -imgImage.Width / 2;
                if (PANEL_DRAG_HORIZONTAL > 75) imgImageTranslate.OffsetX = baseLeft + PANEL_DRAG_HORIZONTAL;
                else if (PANEL_DRAG_HORIZONTAL < -75) imgImageTranslate.OffsetX = baseLeft + PANEL_DRAG_HORIZONTAL;
                else imgImageTranslate.OffsetX = baseLeft;
            }
        }
    }

    private void GestureListener_DragStarted(object sender, DragStartedGestureEventArgs e)
    {
        PANEL_DRAG_HORIZONTAL = 0;
    }

私有void GestureListener_DragCompleted(对象发送方,DragCompletedGestureEventArgs e)
{
if(e.Direction==System.Windows.Controls.Orientation.Horizontal)
{
var abs=Math.abs(面板拖动水平);
如果(abs>75)
{
如果(面板拖动水平>0)//MovePrevious;
else//MoveNext();
e、 已处理=正确;
}
}
}
双面板水平拖动=0;
私有void GestureListener_DragDelta(对象发送方,DragDeltaGestureEventArgs e)
{
if(e.Direction==System.Windows.Controls.Orientation.Horizontal)
{
面板拖动水平+=水平变化;
var baseLeft=-imgImage.Width/2;
如果(面板水平拖动>75)imgImageTranslate.OffsetX=baseLeft+PANEL水平拖动;
如果(面板水平拖动<-75)imgImageTranslate.OffsetX=baseLeft+面板水平拖动;
else imgImageTranslate.OffsetX=baseLeft;
}
}
}
私有void GestureListener_DragStarted(对象发送方,DragStartedTestureEventArgs e)
{
面板水平拖动=0;
}

当您轻弹下一张图像时,scrollviewer是否能够“捕捉”到下一张图像?哇…此框中没有新行:)。。。你能发布一个你的建议的例子吗?查看我编辑过的答案以获得另一个想法。ScrollViewer中没有管理单元。在您的解决方案中,我是否使用带有itemscontrol的ScrollViewer?还有一个用于在scrollviewer中滑动图像的故事板?或者我需要另一个容器控件吗?我对silverlight的这方面相当陌生(一直在stuf后面编写代码,主要操作数据:),实际上我使用的是一个简单的容器(据我记忆所及:D)。但请注意,我在UI上一次只显示一个图像(这使它更快),所以滑动并不是真正的滑动。它是(动画图像到最左边,显示下一个图像,动画从最右边到中心)我已经尝试了一些事情。。。但无法让它工作。您是否可以发布一些示例代码?只是为了让我开始:)请看我上面的代码。请注意,75是我保持的边距,以避免非常敏感的滑块。另外,您的动画将进入MoveNext()和MovePrevious()。thnx!明天早上我要做的第一件事就是:)