2012-05-02 13 views
3

私はWPF開発の初心者です。他のコントロールのGotfocusに基づいてコントロールのテキストを表示

MVVMパターンを使用してwpfアプリケーションを開発しています。私は 'ComboBox'と 'TextBlock'コントロールを持っていました。 ComboBoxにフォーカスすると、TextBlockにはComboboxのツールチップが表示されます。コンボボックスはビューモデルにバインドされています。

<ComboBox Name="cmbSystemVoltage" 
      ToolTip="RMS value of phase-phase voltage in kV" 
      ItemsSource="{Binding Path=SystemVoltageStore}" 
      SelectedItem="{Binding Path=SelectedSystemVoltage}" 
      DisplayMemberPath="SystemVoltageLevel"/> 

どうすれば実現できますか。これを行うためのサンプルコードは非常に役に立ちます。

おかげで、 Sudhi

答えて

2

ElementNameあたりDataTriggerとバインドを使用します。

<StackPanel> 
    <TextBlock> 
     <TextBlock.Style> 
      <Style TargetType="{x:Type TextBlock}">     
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=cmbSystemVoltage, Path=IsKeyboardFocusWithin}" 
           Value="True"> 
         <Setter Property="Text" 
           Value="{Binding ElementName=cmbSystemVoltage, Path=ToolTip}" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </TextBlock.Style> 
    </TextBlock> 
    <ComboBox Name="cmbSystemVoltage" ToolTip="RMS value of phase-phase voltage in kV" /> 
</StackPanel> 

EDIT

あなたは私はむしろ購読うTextBlockに複数のコントロールのツールヒントを表示する場合〜PreviewGotKeyboardFocus Event

<Window PreviewGotKeyboardFocus="Window_PreviewGotKeyboardFocus"> 
    <StackPanel> 
     <TextBlock x:Name="toolTipIndicator" /> 
     <ComboBox ToolTip="Sample text" /> 
     <TextBox ToolTip="Other sample text" /> 
    </StackPanel> 
</Window> 

void Window_PreviewGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
{ 
    FrameworkElement element = e.NewFocus as FrameworkElement; 

    if (element != null && element.ToolTip != null) 
    { 
     this.toolTipIndicator.Text = element.ToolTip.ToString(); 
    } 
    else 
    { 
     this.toolTipIndicator.Text = string.Empty; 
    } 
} 
+0

サンプルコードを投稿していただきありがとうございます。その仕事は大丈夫です。複数のコントロール(ComboBox、TextBoxなど)がある場合、特定のコントロールのGotFocus()に基づいて、すべてのコントロールのツールチップを1つのTextBlockにバインドできますか? – Hebbar

+0

MVVMパターンを使用して、コントロールをモデルにバインドしています。私が正しいとすれば、添付されたコードはMVVMパターンに違反していますか? – Hebbar

+0

いいえ、このコードビハインドはビューにのみ属しているためです。 – LPL

関連する問題