2015-08-27 18 views
11

Tôi có ứng dụng WPF.NET 4.6 chạy trên máy tính bảng Windows 8.1 và trong vài ngày qua tôi đã cố gắng để làm cho ứng dụng của tôi touch thân thiện để làm cho nó hoạt động như mong đợi. Vấn đề chính của tôi là tập trung liên quan, những ảnh hưởng đến một số điều khiển trong ứng dụng của tôi. ví dụ:WPF và liên lạc - tập trung vấn đề

  • Hộp văn bản: đôi khi cần nhấn đúp hoặc nhấn ba lần để lấy tiêu điểm, họ nhập chuột qua trạng thái nhưng dấu mũ không có ở đó;
  • ComboBoxes: thực hiện một vài thao tác để mở và chạm vào một mục để chọn nó, combo sẽ vẫn mở với mục mới được chọn được đánh dấu;
    combobox focus problem
  • Nút: cần một vài lần nhấp để chạy lệnh được kết nối và giữ nguyên trạng thái chuột;
  • Bàn phím hỗ trợ

Có một vài phương pháp tôi đã cố gắng trong khi tìm kiếm một giải pháp mà mỗi người đều có đó là nhược điểm riêng:

  • Loại bỏ các hỗ trợ bảng cho toàn bộ ứng dụng (taken from here). điều này giải quyết hầu hết các vấn đề tập trung được đề cập ở trên nhưng làm cho di chuyển (và tôi đoán một số chức năng khác liên quan đến Tablet mà tôi chưa tìm thấy) không sử dụng được.
  • Kích hoạt rõ ràng bàn phím khi được yêu cầu (Example here). Vấn đề trọng tâm vẫn còn, di chuyển các công trình như mong đợi
  • Tôi cũng đã cố gắng để loại bỏ tất cả các phong cách và thử nghiệm tất cả mọi thứ trên 2 viên khác nhau từ các nhà sản xuất khác nhau nhưng không thành công

Gần đây Microsoft announced rằng "Touch là tốt hơn" Nhưng tôi không thể tìm bất kỳ tài liệu chính thức nào về cách tốt nhất để tiếp cận chủ đề này.

Bất kỳ đề xuất nào về cách làm cho ứng dụng của tôi hoạt động tốt hơn với liên lạc sẽ là một trợ giúp lớn.

Trả lời

1

tôi đã có thể loại bỏ chuột lên nhà nước bằng cách sử dụng hành vi sau đây:

public class TouchDeviceMouseOverUIElementFixBehavior : Behavior<UIElement> 
{ 
    protected override void OnAttached() 
    { 
     AssociatedObject.StylusUp += AssociatedObject_StylusUp; 
    } 

    protected override void OnDetaching() 
    { 
     AssociatedObject.StylusUp -= AssociatedObject_StylusUp; 
    } 

    private void AssociatedObject_StylusUp(object sender, StylusEventArgs e) 
    { 
     var control = sender as FrameworkElement; 
     if (control != null) 
     { 
      if (!VisualStateManager.GoToElementState(control, "Normal", true)) 
      { 
       VisualStateManager.GoToState(control, "Normal", true); 
      } 
     } 
    } 
} 
+1

Làm thế nào để bạn sử dụng đoạn mã này? kết nối để điều khiển sự kiện chạm? –

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