2012-05-02 5 views
3

Я новичок в разработке WPF.Отображение текста элемента управления на основе Gotfocus другого элемента управления

Я разрабатываю приложение wpf с использованием шаблона MVVM. У меня были элементы управления «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

Используйте DataTrigger и привязывать PER ElementName:

<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() определенного элемента управления? – Hebbar

+0

Я использую шаблон MVVM для привязки элемента управления к модели. Если я прав, прикрепленный фрагмент кода нарушает шаблон MVVM? – Hebbar

+0

Нет, потому что этот код только для просмотра. – LPL

Смежные вопросы