2017-01-31 11 views
3

私はWPFを推奨ブックSams Teach Yourself WPF in 24 Hoursで学習しています。私はRoutedEventsを扱っている「時間9」にいる。以下のコードは私が本からタイプしたものです。私が理解しているように、ButtonBase.Clickは、ボタンが呼び出している添付イベントです。これは私が期待しているように機能します。添付されたイベントが予期したとおりに動作しない

<StackPanel ButtonBase.Click="StackPanel_Click"> 
    <Button Content="Red" Foreground="Red"/> 
    <Button Content="Green" Foreground="Green"/> 
    <Button Content="Blue" Foreground="Blue"/> 
    <TextBlock x:Name="Output" 
       HorizontalAlignment="Center" 
       Text="What color will you choose?"/> 
</StackPanel> 

    private void StackPanel_Click(object sender, RoutedEventArgs e) 
    { 

     Button button = (Button)e.Source; 
     Output.Text=string.Format(
      $"You choose the color {button.Content}" 
      ); 
     Output.Background = button.Foreground; 
    } 

私はTextBox失っが集中したときにMessageBoxディスプレイを持ってしようとする試みには、以下の見ているものにコードを変更します。メッセージボックスは、Buttonがプッシュされたときにも発生します。誰かが理解できない部分を明確にするのに役立つことができますか?

<StackPanel ButtonBase.Click="StackPanel_Click" 
      TextBoxBase.LostFocus="StackPanel_LostFocus"> 
    <Button Content="Red" Foreground="Red"/> 
    <Button Content="Green" Foreground="Green"/> 
    <Button Content="Blue" Foreground="Blue"/> 
    <TextBox HorizontalAlignment="Center">Here's some text.</TextBox> 
    <TextBlock x:Name="Output" 
       HorizontalAlignment="Center" 
       Text="What color will you choose?"/> 
</StackPanel> 

    private void StackPanel_Click(object sender, RoutedEventArgs e) 
    { 

     Button button = (Button)e.Source; 
     Output.Text=string.Format(
      $"You choose the color {button.Content}" 
      ); 
     Output.Background = button.Foreground; 
    } 

    private void StackPanel_LostFocus(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show("The text box has lost focus."); 
    } 
+0

あなたは両方ので、両方がそれをトリガーしますしている: 'ButtonBase.Clickは=「StackPanel_Click」 TextBoxBase.LostFocus =「StackPanel_LostFocus」>' – CodingYoshi

答えて

1

ボタンが押されたときにメッセージボックスが発生します。誰かが理解できない部分を明確にするのに役立つことができますか?

TextBoxBase.LostFocus実際LostFocusとして非常に同じイベントである - それはTextBoxBaseButton双方の共通の基底クラスであるUIElementクラスで定義され、すなわちTextBoxBase /テキストボックスのクラスがそれ自身LostFocusイベントを定義していません。 UIElementクラスのLostFocusイベントを継承します。

ここでは、以前にクリックされたボタン、または以前にフォーカスされた要素としてボタンをクリックすると、ボタンがクリックされたときに実際に失われるというイベントが発生します。

+0

私はあなたの答えを理解していることを確認します。 [ButtonBaseクラス](https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase(v = vs.110).aspx)および[TextBoxBaseクラス](https:// msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase(v=vs.110).aspx)には、それぞれ 'UIElement'と' Control'から継承された 'LostFocus'イベントがあります。 'TextBox'や他の要素だけのイベントトリガーを持っていたければ、共有されていないイベントを選択する必要がありますか? – IvenBach

+0

コントロールはUIElementから継承し、LostFocusイベントは1つのみです。そして、TextBoxのイベントトリガーだけを持っていたければ、TextBoxクラスに固有のイベントを選択し、TextBoxによってのみ発生させる必要があります。 – mm8

+0

'ButtonBase'では、継承階層で' System.Windows.UIElement'を見つけることができますが、 'Control'でそれを見つけることはできません。イベントのセクションでは、継承元を示すリンクはありません。コントロールがUIElementから継承していることをどのように判断しますか?私はMSDNを適切にナビゲートする方法を知り、何かを逃していないことを確認したい。 – IvenBach

関連する問題