2014-07-16 25 views
0

我已經創建了一個具有必應地圖的簡單WPF應用程序。問題是,當我嘗試在帶有觸摸輸入的PC上運行我的程序時,它變得非常不穩定:當您嘗試縮放或翻譯地圖時,它會滯後。 順便說一下,相同的應用程序在桌面上正常運行,您只能使用鼠標進行導航。而且,當您在此觸摸設備上的瀏覽器中打開Bing Maps時,一切都可以,所以問題出在代碼中,而且與硬件無關,我認爲。必應地圖WPF multitouchdemo

我做了一些積極的措施:我現在在處理我的代碼操縱事件(在我第一次沒有實現任何控制功能的地圖,所以每一個操作是默認的事件處理程序處理)。它已經改善了這種情況,當你嘗試縮放或翻譯它時,地圖並沒有那麼落後。

但我又遇到了另一個問題。在應用程序工作流程中,我向地圖添加了約200條折線,發生觸摸控制返回問題時,地圖又變得不穩定。

下面是該項目的一些代碼:

MainWindow.xaml

<Window x:Class="NYCTraffic.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

     xmlns:m="clr-namespace:Microsoft.Maps.MapControl.WPF;assembly=Microsoft.Maps.MapControl.WPF" 

     ManipulationDelta="Window_ManipulationDelta" 

     Title="MainWindow" WindowState="Maximized"> 
    <Grid> 
     <m:Map Name="map" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Grid.Row="0" 
        CredentialsProvider="myKey" 
        MouseLeftButtonDown="map_MouseLeftButtonDown" SupportedManipulations="Translate,Scale" 
        IsManipulationEnabled="True" TouchUp="map_TouchUp" AnimationLevel="None" 
        Center="40.714623, -74.006605" ZoomLevel="13" > 
     </m:Map> 
    </Grid> 
</Window> 

MainWindow.xaml.cs

public MainWindow() 
{ 
    InitializeComponent(); 

    map.Focus(); 
    map.ZoomLevel = DEFAULT_ZOOM; 
} 

private void Window_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) 
{ 
    if (e.Manipulators.Count() == 1) 
    { 
     long dx = (long)-e.DeltaManipulation.Translation.X; 
     long dy = (long)-e.DeltaManipulation.Translation.Y; 
     if (Math.Abs(dx) >= SystemParameters.MinimumHorizontalDragDistance || 
      Math.Abs(dy) >= SystemParameters.MinimumVerticalDragDistance) 
     { 
      var p = map.Center; 
      var pLocal = map.LocationToViewportPoint(p); 
      pLocal.Offset(dx, dy); 
      map.Center = map.ViewportPointToLocation(pLocal); 
     } 
    } 
    else 
    { 
     map.ZoomLevel = Math.Log(Math.Pow(2, map.ZoomLevel) * e.DeltaManipulation.Scale.Length/Math.Sqrt(2), 2); 
    } 
    e.Handled = true; 
} 

那不是的整個文本程序,但我認爲這是我的問題最相關的。

因此,沒有任何人有什麼建議嗎?

+1

這是一個已知的問題。 WPF控件是在Windows 8之前構建的,並且設計用於在原始Microsoft Surface設備(桌面計算機)中使用觸摸傳感器。 – rbrundritt

+0

@rbrundritt好吧,很傷心=(所以,這是否意味着沒有可能的方式來避免WPF應用程序中的這個問題? – antonpp

+0

我還沒有遇到過任何人設法自己解決這個問題,通常他們只是禁用觸摸事件,這被記錄爲在WPF控件中修復的bug。 – rbrundritt

回答