Как увеличить или уменьшить масштаб изображений в WP7?
Я сделал приложение, которое отображает "Картинки". Теперь я хочу реализовать функцию увеличения и уменьшения масштаба (используя два кончика пальца), как в приложении для просмотра фотографий в Windows. Любая идея о том, как действовать.
Спасибо в Advance.
Ответы
Ответ 1
Возможно, наиболее целесообразным будет включение Silverlight для Windows Phone Toolkit. Это содержит GestureService
, который поможет сжимать и поворачивать жесты касания. Вы можете применить его к изображению, подобному этому: -
<Image Source="someSourceUrl" RenderTransformOrigin="0.5, 0.5" CacheMode="BitmapCache">
<Image.RenderTransform>
<CompositeTransform x:Name="transform" />
</Image.RenderTransform>
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener PinchStarted="OnPinchStarted" PinchDelta="OnPinchDelta" />
</toolkit:GestureService.GestureListener>
</Image>
Затем в кодировке: -
private void OnPinchStarted(object sender, PinchStartedGestureEventArgs e)
{
initialAngle = transform.Rotation;
initialScale = transform.ScaleX;
}
private void OnPinchDelta(object sender, PinchGestureEventArgs e)
{
transform.Rotation = initialAngle + e.TotalAngleDelta;
transform.ScaleX = initialScale * e.DistanceRatio;
transform.ScaleY = initialScale * e.DistanceRatio;
}
Ответ 2
Проверьте образец мультитач Laurent Bugnion - http://multitouch.codeplex.com/
Ответ 3
Если вам нужен простой просмотрщик изображений, поддерживающий multi-touch, я рекомендую вам использовать элемент управления WebBrowser
для отображения изображения.
Он поддерживает мультитач-масштабирование и плавную прокрутку по умолчанию. Но вам нужно скопировать файл в изолированное хранилище из папки проекта. Вот как я это сделал:
<Grid x:Name="LayoutRoot" Background="Transparent">
<phone:WebBrowser
Name="MyWebBrowserControl"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0" />
</Grid>
IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();
// if image file does not exist in isolated storage, copy it to there~!
if (!isf.FileExists(filename))
{
StreamResourceInfo sr = Application.GetResourceStream(new Uri(filename, UriKind.Relative));
using (BinaryReader br = new BinaryReader(sr.Stream))
{
byte[] data = br.ReadBytes((int)sr.Stream.Length);
using (BinaryWriter bw = new BinaryWriter(isf.OpenFile(filename, FileMode.OpenOrCreate)))
{
bw.Write(data);
bw.Close();
}
br.Close();
}
}
Dispatcher.BeginInvoke(() => { MyWebBrowserControl.Navigate(new Uri(filename, UriKind.Relative)); });
※ Вы должны установить Построить действие файла изображения в Контент