Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 36
WPF

Привязка свойство ComboBox.Text к ComboBox.ToolTip

21.12.2023, 14:52. Показов 1857. Ответов 22

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйся, как выполнить привязку свойства ComboBox.Text к ComboBox.ToolTip
Важно: пожалуйста не предлагайте использовать привязку к свойства во ViewModel, это работает, но мне нужно выполнить привязку именно к свойству элемента управления ComboBox.

XML
1
2
3
4
5
6
7
        <ComboBox Name="myComboBox" Width="200" Height="24" Margin="10" IsEditable="True" IsReadOnly="False">
            <ComboBox.ToolTip>
                <ToolTip>
                    <TextBlock Text="{Binding Text, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}}" />
                </ToolTip>
            </ComboBox.ToolTip>
        </ComboBox>
Занимательное наблюдение, данный способ не работает, однако, если его вставить в процессе отладки, то все начинает работать, как надо, но стоит перезапустить приложение и работать перестает, мне не понятно, почему это так работает

Так же пробовал привязку по ElementName, тоже не работает.
Изображения
 
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.12.2023, 14:52
Ответы с готовыми решениями:

Привязка данных к ComboBox
Дано две базы. В одной список стран, в другой ссылка на эту базу. На форме есть ComboBox &lt;ComboBox...

Привязка поля к ComboBox
Доброго времени суток! Требуется привязать свойство SelectedItem элемента ComboBox к вещественному полю. ...... public class...

ListBox, ComboBox и привязка
Здравствуйте. Покажите, пожалуйста, как реализовать следующее: Ситуация первая. Есть ListBox с тремя строками содержимого. Как при...

22
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
22.12.2023, 00:12
Студворк — интернет-сервис помощи студентам
zakrieff, можно ещё добавить сортировку, чтобы текущее значение всегда сверху было:
XML
12
13
14
15
16
17
18
19
    <FrameworkElement.Resources>
        <local:SomeDocument x:Key="entity"/>
        <CollectionViewSource x:Key="texts"
                              Source="{x:Static local:SomeDocument.Texts}"/>
    </FrameworkElement.Resources>
    <UniformGrid Rows="1">
        <TextBlock x:Name="tb" Text="{Binding Text}"/>
        <ComboBox x:Name="comboBox" ItemsSource="{Binding Source={StaticResource texts}}"
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using CommonCore.Helpers;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
 
namespace Core2023.Topics.zakrieff.Topic3146925
{
    /// <summary>
    /// Логика взаимодействия для SomeDocumentWindow.xaml
    /// </summary>
    public partial class SomeDocumentWindow : Window
    {
        private readonly CollectionViewSource cvs;
        public SomeDocumentWindow()
        {
            InitializeComponent();
 
            cvs = (CollectionViewSource)FindResource("texts");
            tb.AddPropertyChanged(TextBlock.TextProperty, TextListening);
        }
 
        private void TextListening(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            string text = (string) args.NewValue;
            ((ListCollectionView)cvs.View).CustomSort = Comparer<string>.Create((x,y) =>
            {
                int i = x == text ? 0 : 1;
                int j = y == text ? 0 : 1;
                return i.CompareTo(j);
            });
        }
    }
}
Класс прослушки DP-свойства:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
    public static partial class PropertyDescriptorHelper
    {
        /// <summary>Присоединение прослушки изменения свойства.</summary>
        /// <typeparam name="T">Тип прослушиваемоего объекта. <see cref="DependencyObject"/> или производный от него.</typeparam>
        /// <param name="source">Прослушиваемый объект.</param>
        /// <param name="dependencyProperty">Прослушиваемое свойство.</param>
        /// <param name="listener">Метод прослушки.</param>
        public static void AddPropertyChanged<T>(this T source, DependencyProperty dependencyProperty, DependencyPropertyChangedHandler listener)
            where T : DependencyObject
        {
            var descriptor = DependencyPropertyDescriptor.FromProperty(dependencyProperty, source.GetType());
            var propertyHandler = AddPropertyHandler(source, listener, dependencyProperty);
            descriptor.AddValueChanged(source, propertyHandler.Raise);
        }
 
        /// <summary>Отсоединение прослушки изменения свойства.</summary>
        /// <typeparam name="T">Тип прослушиваемоего объекта. <see cref="DependencyObject"/> или производный от него.</typeparam>
        /// <param name="source">Прослушиваемый объект.</param>
        /// <param name="dependencyProperty">Прослушиваемое свойство.</param>
        /// <param name="listener">Метод прослушки.</param>
        public static void RemovePropertyChanged<T>(this T source, DependencyProperty dependencyProperty, DependencyPropertyChangedHandler listener)
            where T : DependencyObject
        {
            var descriptor = DependencyPropertyDescriptor.FromProperty(dependencyProperty, source.GetType());
            var propertyHandler = RemovePropertyHandler(source, listener, dependencyProperty);
            if (propertyHandler != null)
                descriptor.RemoveValueChanged(source, propertyHandler.Raise);
        }
 
        private static readonly ConditionalWeakTable<DependencyObject, Dictionary<(DependencyPropertyChangedHandler handler, DependencyProperty property), PropertyHandler>> handlers = new();
 
        //private static readonly Dictionary<(DependencyObject source, DependencyPropertyChangedHandler handler, DependencyProperty property), PropertyHandler> handlers = new();
 
        private static PropertyHandler AddPropertyHandler(DependencyObject source, DependencyPropertyChangedHandler handler, DependencyProperty property)
        {
 
            if (!handlers.TryGetValue(source, out var properties))
            {
                properties = new();
                handlers.Add(source, properties);
            }
 
            if (properties.TryGetValue((handler, property), out var pHandler))
            {
                pHandler.Count++;
            }
            else
            {
                pHandler = new(handler, property, source.GetValue(property));
                properties.Add((handler, property), pHandler);
            }
            return pHandler;
        }
 
        private static PropertyHandler RemovePropertyHandler(DependencyObject source, DependencyPropertyChangedHandler handler, DependencyProperty property)
        {
            PropertyHandler pHandler = null;
            if (handlers.TryGetValue(source, out var properties))
            {
                if (properties.TryGetValue((handler, property), out pHandler))
                {
                    pHandler.Count--;
                    if (pHandler.Count == 0)
                    {
                        properties.Remove((handler, property));
                    }
                    if (properties.Count == 0)
                    {
                        handlers.Remove(source);
                    }
                }
            }
 
            return pHandler;
        }
 
 
        private class PropertyHandler
        {
            public DependencyPropertyChangedHandler Handler { get; }
 
            public int Count { get; set; }
 
            public DependencyProperty Property { get; }
 
            public object OldValue { get; private set; }
 
            public void Raise(object sender, EventArgs e)
            {
                if (sender is not DependencyObject dObj)
                {
                    throw new InvalidCastException("sender может быть только DependencyObject.");
                }
 
                object oldValue = OldValue;
                object newValue = dObj.GetValue(Property);
 
                Handler(dObj, new DependencyPropertyChangedEventArgs(Property, oldValue, newValue));
 
                OldValue = newValue;
            }
 
            public PropertyHandler(DependencyPropertyChangedHandler handler, DependencyProperty property, object oldValue)
            {
                Handler = handler;
                Property = property;
                Count = 1;
                OldValue = oldValue;
            }
        }
    }
    /// <summary>Делегат метода прослушки изменения <see cref="DependencyProperty"/>.</summary>
    /// <param name="sender">Объект в котором изменилось свойство.</param>
    /// <param name="args">Аргументы изменения.</param>
    public delegate void DependencyPropertyChangedHandler(DependencyObject sender, DependencyPropertyChangedEventArgs args);
См. тему: Прослушивание изменений DependencyProperty
0
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 36
22.12.2023, 09:30  [ТС]
Элд Хасп, благодарю за помощь!
Нужно время чтобы осмыслить все это и почитать ваш блог)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
22.12.2023, 09:52
Цитата Сообщение от zakrieff Посмотреть сообщение
все это и почитать ваш блог)
Тема закреплена в "Важных" в топе раздела и ссылка в моей подписи поста.

Добавлено через 1 минуту
В блоге я пару тем только записал.
Оказалось блог смотрят очень мало пользователей.
Формат темы в "Важных" оказался намного удобнее для пользователей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2023, 09:52

Привязка одномерного массива к ComboBox
Не могу разобратся в чем проблема есть 4 комбо бокса позволяют выбор одинаковой информации. Создал массив для хранения ее но когда я ее...

Привязка Combobox к списку XAML
В общем в шапке вся проблема изложена: не получается привязать через XAML Combobox к простому массиву. В C# всё легко привязывается одной...

Привязка Enum в ComboBox контроле
Ситуация такая, есть комбобокс, привязал к его итемсорсу мою Enum: &lt;UserControl.Resources&gt; &lt;ObjectDataProvider...

Binding ComboBox.Text
Доброго дня! Имеется окно, DataGrid, ComboBox и две модели данных. У DataGrid свойство ItemsSource =...

Неправильное значение combobox.text
Всем шалом у меня такая проблемка есть Combobox он заполняется колонкой из базы данных но когда я выбираю что в нем допустим есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru