2017-05-12 18 views
1

私はWPFでプレースホルダを行う方法を考えていましたが、this答え(最初のもの)が見つかりました。GotFocusとLostFocusの代替/置き換え

答えに与えられたコードはここにある:私は私のコードを入力すると

 TextBox myTxtbx = new TextBox(); 
     myTxtbx.Text = "Enter text here..."; 

     myTxtbx.GotFocus += GotFocus.EventHandle(RemoveText); 
     myTxtbx.LostFocus += LostFocus.EventHandle(AddText); 

     void RemoveText(object sender, EventArgs e) 
     { 
      myTxtbx.Text = ""; 
     } 

     void AddText(object sender, EventArgs e) 
     { 
      if (String.IsNullOrWhiteSpace(myTxtbx.Text)) 
       myTxtbx.Text = "Enter text here..."; 
     } 

、私は次のエラーを取得する:

The event 'UIElement.GotFocus' can only appear on the left hand side of += or -=

The event 'UIElement.LostFocus' can only appear on the left hand side of += or -=

私が何を知っていますエラーは意味しますが、エラーを修正するために何をすべきかはわかりませんが、依然として望ましい結果が得られます。ヘルプは非常に高く評価されるだろう!

+0

コードは、罰金に見えます。あなたが試したことを共有してください –

+0

@NareshRavlani私は 'GotFocus'と' LostFocus'の代わりに何を入れるのかよく分かりません。 –

+0

@NathanChanこれはトリック 'myTxtbx.GotFocus + =新しいRoutedEventHandler(RemoveText);を実行する必要があります –

答えて

0

ここでは、完全なコードサンプルを示します。私は2つのテキストボックスを作成しました.1つはプレースホルダを表示し、もう1つはフォーカスを失ったイベントを呼び出すためのものです。 Textbox 1がフォーカスイベントを失うのに役立つ他のコントロールがある場合は、2番目のテキストボックスを削除できます。次に、AddTextメソッドとRemoveTextメソッドを使用します。あなたがこの上の任意の詳細が必要な場合は私に知らせて:

XAML

<StackPanel Name="sp1" Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
</StackPanel> 

CODE

 TextBox myTxtbx; 
     public MainWindow() 
     { 
      InitializeComponent();    
      TextBox myTxtbx = new TextBox(); 
      TextBox myTxtbx1 = new TextBox(); 
      myTxtbx.Height = 50; 
      myTxtbx.Width = 100; 
      myTxtbx1.Height = 50; 
      myTxtbx1.Width = 100; 
      myTxtbx.Text = "Enter text here..."; 
      myTxtbx.Text = "I am here just to help call lost focus"; 
      myTxtbx.GotFocus += MyTxtbx_GotFocus1; 
      myTxtbx.LostFocus += MyTxtbx_LostFocus; 

      sp1.Children.Add(myTxtbx); //Sp1 is any layout control in which you want to add your textbox, In my case I have stackpanel. 
      sp1.Children.Add(myTxtbx1); 
     } 

     private void MyTxtbx_LostFocus(object sender, RoutedEventArgs e) 
     { 
      var a = sender as TextBox; 
      if (String.IsNullOrWhiteSpace(a.Text)) 
       a.Text = "Enter text here..."; 
     } 

     private void MyTxtbx_GotFocus1(object sender, RoutedEventArgs e) 
     { 
      var a = sender as TextBox; 
      a.Text = ""; 
     } 
+0

sp1のために?定義されていないというエラーが表示されます –

+0

コメントに既に追加されています。 Sp1は、あなたのテキストボックスを追加したいレイアウトコントロールです。私の場合、スタックパネルがあります。 –

+0

これは簡単ですが、 'MainWindowViewModel'とは何ですか? –

関連する問題