2010-08-03 19 views
5

Windows telefonumda 7 App Tek satırlık bir metin kutum var. Kullanıcı {ENTER} tuşuna bastığında metin kutusu değerini kabul etmek ve metin kutusunu normal düzenleme dışı moduna geçirmek istiyorum.Bir metin kutusunu düzenlemeyi programlı olarak iptal etmenin bir yolu var mı?

Temel olarak, bir metin kutusunu düzenlemeyi programla iptal etmenin bir yolu var mı?

Visual State Manager'ı görsel moda değiştiren Normal moda zorlamayı denedim, ancak metin kutusu hala düzenleme modunda ve ekran klavyesi hala görünüyor. Ayrıca, bir ana denetimin program aracılığıyla seçilmesini de denedi ancak bu da işe yaramıyor gibi görünüyor.

Sanırım basit bir şey eksik olmalıyım, birinin bunu milyonlarca kez yapmış olması gerekir - takdir edilen herhangi bir yardım.

sayesinde

Güncelleme: Başka Kontrol odağı ayarlamak çalıştı ama bu çalışma değildi, SIP klavye ortadan asla.

Ama başka bir yöntem kullanarak anladım. Hile IsReadOnly bayrağını kullanmaktı. Odağı kaybettiğinde veya enter tuşuna basıldığında, kontrolü yalnızca stili güncelleyen okunacak şekilde ayarladım. Yapmam gereken tek şey görsel üslerimi güncellemekti, bu yüzden doğru görünüyordu ve şimdi mükemmel çalışıyor.

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); 
     } 
    } 

cevap

3

İki seçenek: Ne olursa olsun için

, benim kod artık şuna benzer (? Belki Label)

  1. Çağrı Odak() diğer bazı alakasız kumanda üzerindeki
  2. Devre Dışı Bırak Metin Kutusu'nu etkinleştir (hacky hisseder, ancak çalışır).
+1

yerine ben "IsReadOnly" kullanılmış etkin - ama aynı fikri. Teşekkürler! – will

0

Bu Ben'in yanıta göre, nasıl yaptığını geçerli:

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... 
    } 
} 
İlgili konular