我目前正在开发一个像Windows 8.1上的Photo App一样创建应用程序的项目
有些不同:
期待行为:
曾为:
对于3和4,这是我到目前为止所拥有的 3:
首先,获取FlipView的ScrollViewer
MainFlipViewScrollViewer = FindFirstElementInVisualTree<ScrollViewer>(MainFlipView);
然后,让ScrollViewer INSIDE为datatemplate并注册ViewChanged事件
var flipViewItem = MainFlipView.ItemContainerGenerator.ContainerFromIndex(MainFlipView.SelectedIndex);
var scrollViewItem = FindFirstElementInVisualTree<ScrollViewer>(flipViewItem);
scrollViewItem.ViewChanged += scrollViewItem_ViewChanged;
在ViewChanged事件处理程序中,检查ZoomFactor是否大于正常以禁用FlipView的ScrollViewer,并且小于正常值以重置为正常
void scrollViewItem_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
float zoomF = ((ScrollViewer)sender).ZoomFactor;
if (zoomF > 1.0f)
{
MainFlipViewScrollViewer.IsEnabled = false;
}
else
{
((ScrollViewer)sender).ZoomToFactor(1.0f);
MainFlipViewScrollViewer.IsEnabled = true;
}
}
问题是当我只是缩小一点时,图像不响应触摸(它不会挂起)
所有这些只影响第一项。当我滑动到下一个项目时,我可以放大,缩小,scrollViewItem_ViewChanged事件不会触发
PS:FindFirstElementInVisualTree的代码
private T FindFirstElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
{
if (parentElement != null)
{
var count = VisualTreeHelper.GetChildrenCount(parentElement);
if (count == 0)
return null;
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(parentElement, i);
if (child != null && child is T)
return (T)child;
else
{
var result = FindFirstElementInVisualTree<T>(child);
if (result != null)
{
return result;
}
}
}
}
return null;
}