Arhn - архитектура программирования

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

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

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

ComboBox помещается в DataGridTemplateColumn -> Cell Template -> 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>

ОБНОВЛЕНИЕ

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;
}

}

10.01.2019

Ответы:


1

Вы можете использовать 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 с любым свойством вашего объекта данных, которое вы хотите отобразить.

10.01.2019
  • Привет! Когда я наводю указатель мыши на элементы, появляется небольшая рамка, но мой стиль ComboBox меняется на ... худший. Он также не связывается с моей ToolTipLabel. Смотрите обновление. Я знаю, что должен добавить логику, но это что-то вроде if (ComboBoxItem.index == 0) ToolTipText = ToolTipList [0]; еще {...} 10.01.2019
  • Ваш DataGrid привязан к ToolTipList? Или что такое LiniaWyComboBox? 10.01.2019
  • Нет это не так. Он привязан к свойству LiniaWyComboBox класса LineOut, которое является ObservableCollection ‹double›. LineWy = LineOut 10.01.2019
  • Итак, что вы хотите отобразить во всплывающей подсказке, если вы показываете двойные значения в DataGrid? 10.01.2019
  • Я хочу, чтобы кто-то знал, что означают эти два значения в поле со списком, просто информацию об этих значениях. Вы имеете в виду, что когда DataGrid привязан к удвоению, Combobox больше ничего не обновляет? Как я объяснил? Спасибо, что помогли мне :) 10.01.2019
  • Вы не ответили на мой вопрос. Что именно вы хотите отобразить в ComboBox. Просто привяжите TextBlock к этому свойству. 10.01.2019
  • Что ж .. DataGrid имеет это: ItemsSource = {Binding LiniaWyComboBox, RelativeSource = {RelativeSource AncestorType = Window}, Mode = TwoWay, UpdateSourceTrigger = PropertyChanged}. Я привязываю TextBlock к ToolTipText из ToolTipLabel.cs, и в конечном итоге он туда не попадает. 10.01.2019
  • Как найти свойство ToolTipText? Где и как вы создаете экземпляр ToolTipLabel? 10.01.2019
  • ‹TextBlock Text = {Binding ToolTipText} /› Я предоставил код для ToolTipLabel.cs в обновлении моего сообщения 10.01.2019
  • Но где вы создаете экземпляр типа ...? Вы опубликовали определение класса, но неясно, как вы его используете. 10.01.2019
  • общедоступный ToolTipLabel TT {получить; набор; } = новый ToolTipLabel (); У меня есть эта строка во ViewModel, и я вообще-то не знаю, что делать дальше. Может быть, я не создаю его должным образом .. Я сделал TT.ToolTipNext = TextToBeShown в методе PradPojemnosciowyComboBox_OnDropDownOpened. Все еще нет результата 10.01.2019
  • Как выполнить привязку к определенному свойству, на самом деле не связано с вашим исходным вопросом о том, как отображать всплывающую подсказку для каждого элемента. 10.01.2019
  • У меня есть эта ошибка: System.Windows.Data Ошибка: 40: Ошибка пути BindingExpression: свойство ToolTipText не найдено в объекте «Double» (HashCode = 1076756480). BindingExpression: Path = ToolTipText; DataItem = «Двойной» (HashCode = 1076756480); целевой элемент - TextBlock (Name = ''); целевым свойством является 'Текст' (тип 'Строка') 13.01.2019
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..