2010-08-03 28 views
5

Trong cửa sổ điện thoại của tôi 7 Ứng dụng Tôi có một hộp văn bản một dòng. Khi người dùng nhấn {ENTER}, tôi muốn chấp nhận giá trị hộp văn bản và chuyển hộp văn bản trở lại chế độ không chỉnh sửa thông thường.Có cách nào để hủy chương trình chỉnh sửa hộp văn bản không?

Về cơ bản, có cách nào để hủy lập trình chỉnh sửa hộp văn bản không?

Tôi đã thử sức mạnh Trình quản lý trạng thái trực quan thành chế độ Bình thường làm thay đổi kiểu trực quan, nhưng hộp văn bản vẫn ở chế độ chỉnh sửa và bàn phím ảo vẫn hiển thị.

  VisualStateManager.GoToState(
       this.MyTextBox, 
       "Normal", 
       true); 

      VisualStateManager.GoToState(
       this.MyTextBox, 
       "Unfocused", 
       true); 

Cũng cố gắng chọn chương trình kiểm soát cha mẹ theo chương trình nhưng điều đó dường như không hoạt động.

Tôi nghĩ rằng tôi phải thiếu một cái gì đó đơn giản, ai đó phải đã làm điều này một triệu lần - bất kỳ sự giúp đỡ nhiều đánh giá cao.

Cảm ơn,

Cập nhật: Tôi cố gắng để đặt trọng tâm vào một điều khiển nhưng điều đó không làm việc, bàn phím SIP sẽ không bao giờ biến mất.

Nhưng tôi đã tìm ra bằng phương pháp khác. Bí quyết là sử dụng cờ IsReadOnly. Khi bị mất tiêu điểm hoặc nhập được nhấn, tôi đặt điều khiển trở lại để chỉ đọc để cập nhật kiểu. Tất cả những gì tôi phải làm là cập nhật hình ảnh trực quan của tôi để nó trông đúng và bây giờ hoạt động hoàn hảo.

Đối với những gì nó có giá trị, mã của tôi bây giờ trông giống như sau:

private void MyTextBox_GotFocus(object sender, RoutedEventArgs e) 
    { 
     this.MyTextBox.IsReadOnly = false; 
     this.MyTextBox.SelectAll();    
    } 

    private void MyTextBox_LostFocus(object sender, RoutedEventArgs e) 
    { 
     this.MyTextBox.IsReadOnly = true; 
    } 

    private void MyTextBox_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter) 
     { 

      this.MyTextBox.IsReadOnly = true; 
      VisualStateManager.GoToState(
       this.MyTextBox, 
       "ReadOnly", 
       true); 
      VisualStateManager.GoToState(
       this.MyTextBox, 
       "Unfocused", 
       true); 
      VisualStateManager.GoToState(
       this.MyTextBox, 
       "Valid", 
       true); 
     } 
    } 

Trả lời

3

Hai lựa chọn: (? Có thể là một Label)

  1. Gọi Focus() trên một số kiểm soát không liên quan khác
  2. Tắt rồi bật Hộp văn bản (cảm thấy bị hack, nhưng nó hoạt động).
+1

Thay vì cho phép tôi sử dụng "IsReadOnly" - nhưng ý tưởng tương tự. Cảm ơn! – will

0

Đây là cách tôi đã làm nó, dựa trên câu trả lời của Ben:

private void SearchBox_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Enter && !String.IsNullOrEmpty(SearchBox.Text)) 
    { 
    (sender as TextBox).IsEnabled = false; 
    (sender as TextBox).IsEnabled = true; 

    // Process search term here... 
    } 
} 
Các vấn đề liên quan