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

Выделение ListBoxItem при фокусе на вложенном элементе

25.04.2019, 17:33. Показов 1318. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, сразу к делу, есть такой ListBox:
XML
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
<ListBox x:Name="ChatBoxList" Width="{Binding ElementName=MainPanelList, Path=ActualWidth}" Height="{Binding ElementName=MainPanelList, Path=ActualHeight}" BorderBrush="{x:Null}" Background="#333333" Foreground="White" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled" HorizontalAlignment="Center" SelectionChanged="ChatBoxList_SelectionChanged">
                    <ListBox.Style>
                        <Style>
                            <Style.Resources>
                                <!-- Item TextColor -->
                                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="#FFFFFF" />
                                <!-- Background of selected item when focussed -->
                                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#0080FF" />
                                <!-- Background of selected item when not focussed -->
                                <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#333333" />
                            </Style.Resources>
                        </Style>
                    </ListBox.Style>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Grid x:Name="RichBoxGrid" HorizontalAlignment="Stretch">
 
                                <RichTextBox x:Name="RichBoxMessage" Width="{Binding ElementName=ChatBoxList, Path=ActualWidth}" VerticalAlignment="Center" HorizontalAlignment="Left" Height="Auto" IsReadOnly="True" Background="{x:Null}" SelectionBrush="{x:Null}" Foreground="#FFFFFF" FontWeight="Bold" BorderBrush="{x:Null}" FontSize="16" MinHeight="40" >
                                    <RichTextBox.Template>
                                        <ControlTemplate>
                                            
                                                <ScrollViewer x:Name="PART_ContentHost" Background="{x:Null}"/>
                                                
                                        </ControlTemplate>
                                    </RichTextBox.Template>
                                    <FlowDocument>
                                        <Paragraph>
                                            <Run Text="{Binding Path=NameRoom}" Foreground="#FFFFFF" />
                                        </Paragraph>
                                    </FlowDocument>
                                </RichTextBox>
                            </Grid>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
Мне необходимо чтоб при нажатии на любой элемент содержащийся в ListBox, будь то кнопка, текст или RichTextBox как в моём случае, весь элемент выделялся, как это сделать?

Добавлено через 9 минут
Нужен полный игнор элементов внутри ListBoxItem'a, чтоб при нажатии на Label, Button и т.д выделялся этот элемент.
Но так же был бы рад как обойти это устройство(задаток на будущее так сказать, вдруг пригодиться)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.04.2019, 17:33
Ответы с готовыми решениями:

ListBoxItem выделение, лишнее место
Доброго времени суток. Возможно проблема заезженная, извиняйте. У меня имеется ListBox. Описан шаблон для содержимого. Но...

Как программно (кнопкой) снимать выделение строчек ListBoxItem элемента ListBox
В моей программе елемент ListBox в одних случаях необходимо убирать из окна (Hidden), в других – выводить вновь (Visible). Однако ранее...

Убрать выделение ячеек в StringGrid при фокусе
Как сделать чтобы не выделялось синим цветом при фокусе на определенной ячейке в StringGrid, но при этом возможность фокуса осталась,...

5
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,869
25.04.2019, 18:04
Цитата Сообщение от Sjaks Посмотреть сообщение
Нужен полный игнор элементов внутри ListBoxItem'a, чтоб при нажатии на Label, Button и т.д выделялся этот элемент.
Но так же был бы рад как обойти это устройство(задаток на будущее так сказать, вдруг пригодиться)
Ссылка не вставляется
Кликните здесь для просмотра всего текста

Во-первых, вам нужно реализовать интерфейс INotifyPropertyChanged в вашей модели представления и поднять событие PropertyChanged в настройщике свойства Rule. В противном случае управление, связанное с свойством SelectedRule, будет "знать", когда оно было изменено.

Затем ваш XAML

<TextBlock Text="{Binding Path=SelectedRule.Name}" />
отлично, если этот TextBlock находится вне ListBox ItemTemplate и имеет тот же DataContext, что и ListBox.

Внутри DataTemplate вы работаете в контексте Rule, поэтому вы не можете привязываться к SelectedRule.Name - такого свойства на Rule нет. Чтобы привязываться к исходному контексту данных (который является вашим ViewModel), вы можете написать:

<TextBlock Text="{Binding ElementName=lbRules, Path=DataContext.SelectedRule.Name}" />


Кликните здесь для просмотра всего текста
XAML
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<Window x:Class="TestWpfApplication.ListBoxSelectedItem"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="ListBoxSelectedItem" Height="300" Width="300"
    xmlns:app="clr-namespace:TestWpfApplication">
    <Window.DataContext>
        <app:ListBoxSelectedItemViewModel/>
    </Window.DataContext>
    <ListBox ItemsSource="{Binding Path=Rules}" SelectedItem="{Binding Path=SelectedRule, Mode=TwoWay}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="Name:" />
                    <TextBox Text="{Binding Name}"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Window>

Кликните здесь для просмотра всего текста

namespace TestWpfApplication
{
/// <summary>
/// Interaction logic for ListBoxSelectedItem.xaml
/// </summary>
public partial class ListBoxSelectedItem : Window
{
public ListBoxSelectedItem()
{
InitializeComponent();
}
}


public class Rule
{
public string Name { get; set; }
}

public class ListBoxSelectedItemViewModel
{
public ListBoxSelectedItemViewModel()
{
Rules = new ObservableCollection<Rule>()
{
new Rule() { Name = "Rule 1"},
new Rule() { Name = "Rule 2"},
new Rule() { Name = "Rule 3"},
};
}

public ObservableCollection<Rule> Rules { get; private set; }

private Rule selectedRule;
public Rule SelectedRule
{
get { return selectedRule; }
set
{
selectedRule = value;
}
}
}
}


И тут
1
0 / 0 / 0
Регистрация: 12.03.2019
Сообщений: 36
25.04.2019, 18:28  [ТС]
Цитата Сообщение от Kazbek17 Посмотреть сообщение
Сообщение от Sjaks
Нужен полный игнор элементов внутри ListBoxItem'a, чтоб при нажатии на Label, Button и т.д выделялся этот элемент.
Но так же был бы рад как обойти это устройство(задаток на будущее так сказать, вдруг пригодиться)
Ссылка не вставляется
Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
И тут
Как всё сложно....
Я ожидал более лёгкого решения, ну да ладно...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
26.04.2019, 01:16
Цитата Сообщение от Sjaks Посмотреть сообщение
Как всё сложно....
Я ожидал более лёгкого решения, ну да ладно...
Если я Вас правильно понял, то Вам нужно выделение самого ListBoxItem если выделен один из вложенных в него элементов.

Если так то для этого надо связать через триггер свойства IsKeyboardFocusWithin и IsSelected в стиле ListBoxItem.
Ни каких изменений в шаблон или ViewModel для этого вносить не надо.

Пример реализации посмотрите в посте Программное создание item в TreeView MVVM строки 93-102 вьюшки.
0
0 / 0 / 0
Регистрация: 12.03.2019
Сообщений: 36
28.04.2019, 17:26  [ТС]
Спасибо за информацию, и такой еще вопрос, он подходит под эту тему.
У меня есть такой код в ListBox
XML
1
2
3
4
5
6
<!-- Item TextColor -->
                                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="#FFFFFF" />
                                <!-- Background of selected item when focussed -->
                                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#0080FF" />
                                <!-- Background of selected item when not focussed -->
                                <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#333333" />
Всё это работает но не работает одно, это после потери фокуса цвет не меняется на который я поставил, он остается все тем же системным.
Пробовал еще такую строчку:
XML
1
<SolidColorBrush x:Key="{x:Static SystemColors.ControlColorKey}" Color="#333333" />
Но тоже не помогло ,как решить это?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
28.04.2019, 17:51
Цитата Сообщение от Sjaks Посмотреть сообщение
после потери фокуса цвет не меняется на который я поставил, он остается все тем же системным
Переопределение системных кистей работает только в Win7. Да, и то не знаю точно - может сейчас уже и там не работает.

Если будете развивать тему, то лучше создайте новую.
Правила. Пункт 4.4.На каждый вопрос создавайте по одной теме - это помогает избежать путаницы в ответах и облегчает поиск.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.04.2019, 17:51
Помогаю со студенческими работами здесь

DataView - реализовать выделение строки или ячейки при фокусе
Добрый день! Создал небольшую страничку, где Dataview заполняется данными. Все нормально работает отображает данными, но когда хочу...

Выделение значения в элементе.
Всем добрый день! Есть форма, на ней есть 1 контрол.Источник записей, которые выводятся в него - запрос на выборку. Переход по...

Пунктирное выделение tabPage в элементе tabControl
Подскажите, как убрать пунктирное выделение каждой созданной вкладки (tabPage) в элементе tabControl? Никаких особенных манипуляций не...

ListBoxItem не группируются при уменьшении размеров окна
Добрый день. Помогите решить задачку. Grid - StackPanel - ListBox. Заполняем ListBox значениями запускаем. Теперь при уменьшении размеров...

Как при свёртывание вкладки/окна браузера,остановить(очистить) интервал,а при фокусе опять его установить
Как при свёртывание вкладки/окна браузера,остановить(очистить) интервал,а при фокусе опять его установить?


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Вот уже год прошел, как у меня домен в reg.ru ...
Etyuhibosecyu 16.04.2026
И ничего они мне не сделали. Если отвязать карту, никакие услуги они не навяжут. Я бы с радостью продлил еще на два года, чтобы не мучиться с временным доменом и меня уже знали по red-star-soft. com,. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru