Отображение всплывающей подсказки для каждого элемента Combobox при открытии списка C # WPF XAML MVVM - PullRequest
0 голосов
/ 10 января 2019

Я занимаюсь разработкой приложения на C # MVVM Мой вопрос касается добавления всплывающей подсказки для каждого элемента, к которому привязан ComboBox. Поскольку есть только два элемента, я хочу, чтобы он отображал всплывающую подсказку всякий раз, когда я открываю раскрывающийся список и наводил указатель мыши на один из элементов, например:

если навести курсор мыши на первый элемент в dropDown, я получу всплывающую подсказку с «первым элементом» и «вторым элементом», когда наведу курсор на второй элемент.

ComboBox помещается в DataGridTemplateColumn -> Шаблон ячейки -> DataTemplate

<DataGridTemplateColumn Header="PRĄD POJEMNOŚCIOWY [A]" HeaderStyle="{StaticResource PRAD_POJEMNOSCIOWY}">
 <DataGridTemplateColumn.CellTemplate>
  <DataTemplate>
   <ComboBox Name="PradPojemnosciowyComboBox"
             SelectedValue="{Binding SelectedItem, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
             ItemsSource="{Binding Path=LiniaWyComboBox, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
             IsEditable="True"
             IsReadOnly="False"
             Text="{Binding Prad_pojemnosciowy, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
             IsTextSearchEnabled="False" 
             IsSynchronizedWithCurrentItem="True"
             PreviewKeyDown="PradPojemnosciowyComboBox_OnPreviewKeyDown">

          <ComboBox.Style>
           <Style TargetType="ComboBox">
            <Style.Triggers>
            <Trigger Property="SelectedValue" Value="{x:Null}">
          <Setter Property="SelectedIndex" Value="{Binding LiniaWyComboBox}"/>
            </Trigger>
           </Style.Triggers>
          </Style>
    </ComboBox.Style>
   </ComboBox>
  </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

UPDATE

ToolTipLabel.cs:

using System.ComponentModel;
using System.Collections.ObjectModel;

namespace GPZmodel.UserControlsGraphicGenerators
{
   public class ToolTipLabel : INotifyPropertyChanged
{
    private string _toolTipText;
    public string ToolTipText
    {
        get { return _toolTipText;}
        set
        {
            if (_toolTipText != value)
            {
                _toolTipText = value;
            }
        }
    }
    public ObservableCollection<ToolTipLabel> ToolTipList = new ObservableCollection<ToolTipLabel>()
    {
        new ToolTipLabel() {ToolTipText = "Nazwa1"} ,
        new ToolTipLabel() {ToolTipText = "Nazwa2"} ,

    };

    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

}

1 Ответ

0 голосов
/ 10 января 2019

Вы можете использовать ItemContainerStyle:

<ComboBox Name="PradPojemnosciowyComboBox"
             SelectedValue="{Binding SelectedItem, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
             ItemsSource="{Binding Path=LiniaWyComboBox, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
             IsEditable="True"
             IsReadOnly="False"
             Text="{Binding Prad_pojemnosciowy, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
             IsTextSearchEnabled="False" 
             IsSynchronizedWithCurrentItem="True"
             PreviewKeyDown="PradPojemnosciowyComboBox_OnPreviewKeyDown">
    <ComboBox.Style>
        <Style TargetType="ComboBox">
            <Style.Triggers>
                <Trigger Property="SelectedValue" Value="{x:Null}">
                    <Setter Property="SelectedIndex" Value="{Binding LiniaWyComboBox}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
    <ComboBox.ItemContainerStyle>
        <Style TargetType="ComboBoxItem">
            <Setter Property="ToolTip">
                <Setter.Value>
                    <TextBlock Text="{Binding}" />
                </Setter.Value>
            </Setter>
        </Style>
    </ComboBox.ItemContainerStyle>
</ComboBox>

Свяжите TextBlock в ToolTip с любым свойством объекта данных, которое вы хотите отобразить.

...