2010-10-27 24 views
5

Tôi đang xây dựng một ứng dụng liên quan đến GPS hiển thị tọa độ giữa các tính toán khác. Mã demo của tôi được thiết lập để kích hoạt các sự kiện mỗi giây.Tại sao trang Toàn cảnh WP7 lại nhảy khi cập nhật?

Bất cứ khi nào tôi cập nhật giao diện người dùng trang chính (ví dụ: hộp văn bản có Latitude được tính), nó hoạt động tốt.

Vấn đề là nếu tôi cố gắng "vuốt" từ một phía sang phía bên kia, để thay đổi trang. Trong khi đang trong quá trình "flicking", nếu hộp văn bản được cập nhật, nó sẽ nhảy trở lại trang chính.

Loại khó giải thích bằng văn bản không có video. Nhưng hãy tưởng tượng nhấp chuột-n-giữ, và kéo màn hình toàn cảnh chỉ một chút - nói, để nhìn trộm ở trang tiếp theo nhưng không lật. Vâng, nếu hộp văn bản đã được cập nhật trong thời gian đó, bạn sẽ mất nhấp chuột giữ của bạn và nó sẽ nhảy trở lại trang chính.

Khi bạn chuyển sang trang tiếp theo, nó vẫn còn và tôi có thể thấy cập nhật tràn từ trang trước. Không có vấn đề lớn ở đó. Nhưng nó chỉ cố gắng để đến trang tiếp theo đó.

Tôi mới sử dụng WP7/Silverlight, vì vậy tôi đã cố gắng sử dụng Dispatcher để làm cho mọi thứ phản hồi nhanh hơn. Không có vấn đề gì tôi làm (sử dụng Dispatcher hay không), điều này luôn luôn xảy ra. Vì vậy, tôi đoán điều này đã làm với giao diện người dùng đang được cập nhật.

Một mã nhỏ luôn giúp:

void GeoWatcher_PositionChanged(object sender, 
    GeoPositionChangedEventArgs<GeoCoordinate> e) 
{ 
    Deployment.Current.Dispatcher.BeginInvoke(() => MyPositionChanged(e)); 
} 
void MyPositionChanged(GeoPositionChangedEventArgs<GeoCoordinate> e) 
{ 
    var model = GeoProcessor.GetPosition(e.Position); 

    latitude.Text = model.Latitude; 
    longitude.Text = model.Longitude; 
    altitude.Text = model.Altitude; 
    accuracy.Text = model.Accuracy; 
    direction.Text = model.Direction; 
    speed.Text = model.Speed; 
    speedAvg.Text = model.SpeedAvg; 

} 

Khi bất kỳ của các textbox được cập nhật, màn hình "nhảy" trở lại trang chính. Loại kinh nghiệm xấu.

Có thể điều đó là bình thường? Có sự kiện nào liên quan đến việc biết rằng người dùng đang cố gắng "trượt" trang tiếp theo không?

Xin cảm ơn trước.

Trả lời

1

Vâng, điều này giống như một hack. Nhưng tôi đã nhận được sự chậm trễ mà tôi muốn bằng cách tham gia vào một số sự kiện. Nếu có các sự kiện khác tôi nên sử dụng (ví dụ: mousedown/mouseup), hãy cho tôi biết. Một lần nữa, đây là một hack nhưng hoạt động.

bool isChangingPage = false; 
bool isCompleting = false; 

public MainPage() 
{ 
    InitializeComponent(); 
    this.Loaded += new RoutedEventHandler(MainPage_Loaded); 

    this.ManipulationStarted += 
     new EventHandler<ManipulationStartedEventArgs>(MainPage_ManipulationStarted); 
    this.ManipulationCompleted += 
     new EventHandler<ManipulationCompletedEventArgs>(MainPage_ManipulationCompleted); 
} 

void MainPage_ManipulationStarted(object sender, ManipulationStartedEventArgs e) 
{ 
    isChangingPage = true; 
} 

void MainPage_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) 
{ 
    if (isCompleting) 
     return; 
    isCompleting = true; 

    Deployment.Current.Dispatcher.BeginInvoke(() => 
    { 
     Thread.Sleep(1000); 
     isChangingPage = false; 
     isCompleting = false; 
    }); 
} 

Tất cả những gì tôi phải làm bây giờ là kiểm tra hàm boolean isChangingPage trong mã của tôi. Và vượt qua nó để sự kiện, vv

1

Tôi đoán rằng khi bạn thiết .Text trên tất cả các đối tượng trực tiếp họ đang nhận được tập trung (hoặc một cái gì đó tương tự.)

Hãy thử sử dụng liên kết dữ liệu để thiết lập các giá trị.
Tôi thực hiện thành công việc này để cập nhật văn bản của các điều khiển trên PanoramaItems không có trong chế độ xem.

Các vấn đề liên quan