powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Выравнивание выбранного в ComboBox элемента.
11 сообщений из 11, страница 1 из 1
Выравнивание выбранного в ComboBox элемента.
    #38485777
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.

Мне нужно, чтобы элемент, выбранный в ComboBox, был выровнен по левому краю (так, как выровнены элементы в раскрытом списке):



Однако, после того, как элемент выбран, он выравнен следующим образом:



Кроме того, если я теперь снова разверну список, то на время выбора , текст текущего элемента исчезает:



Фрагмент кода, заполняющего список:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
...
WPF.Image img = new WPF.Image();
String name = "SheetSet";
img.Source = GetImageSource(name);
WPF.StackPanel panel = new WPF.StackPanel();
panel.Margin = new System.Windows.Thickness(1);
panel.Orientation = WPF.Orientation.Horizontal;
panel.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;			
panel.Children.Add(img);
panel.Children.Add(new WPF.TextBlock {
	Text = sheetset.GetName(), Margin = new System.Windows.Thickness(2,1,1,0)});
item.Content = panel;
item.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
item.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Left;
item.Tag = id;
control.cboSheetSets.Items.Add(item); // Add the new item into the combo box.
...


Вопросы:
1. Как выровнять выбранный элемент по левому краю?
2. Почему пропадает текст текущего элемента на время раскрытия списка (3-й скрин) и как это исправить?

Спасибо.
...
Рейтинг: 0 / 0
Выравнивание выбранного в ComboBox элемента.
    #38485794
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Возможно установить TextBlock.HorizontalAlignment.

2. Пропадает, потому что один UIElement не может одновременно отображаться в двух местах (в списке и заголовке). Надо сделать по-MVVM-ному. Забиндить ComboBox.ItemsSource на какой-нибудь список.
...
Рейтинг: 0 / 0
Выравнивание выбранного в ComboBox элемента.
    #38485814
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К1. Возможно установить TextBlock.HorizontalAlignment.
Добавил выравнивание везде, где только можно (места помечены комментами), но результат всё тот же:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
...
WPF.Image img = new WPF.Image();
img.HorizontalAlignment = System.Windows.HorizontalAlignment.Left; // added line
String name = "SheetSet";
img.Source = GetImageSource(name);
WPF.StackPanel panel = new WPF.StackPanel();
panel.Margin = new System.Windows.Thickness(1);
panel.Orientation = WPF.Orientation.Horizontal;
panel.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
panel.Children.Add(img);
panel.Children.Add(new WPF.TextBlock {
	Text = sheetset.GetName(),
	Margin = new System.Windows.Thickness(2, 1, 1, 0),
	HorizontalAlignment = System.Windows.HorizontalAlignment.Left // added line
});
item.Content = panel;
item.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
item.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Left;
item.Tag = id;
control.cboSheetSets.Items.Add(item); // Add the new item into the combo box.
...


Алексей К2. Пропадает, потому что один UIElement не может одновременно отображаться в двух местах (в списке и заголовке). Надо сделать по-MVVM-ному. Забиндить ComboBox.ItemsSource на какой-нибудь список.
А иконка тогда почему не исчезает?
...
Рейтинг: 0 / 0
Выравнивание выбранного в ComboBox элемента.
    #38485831
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumА иконка тогда почему не исчезает?Да какая разница? Сделай сначала нормально, через DataTemplate в XAML. Там видно будет.
...
Рейтинг: 0 / 0
Выравнивание выбранного в ComboBox элемента.
    #38485836
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumДобавил выравнивание везде, где только можно (места помечены комментами), но результат всё тот жеНадо смотреть ControlTemplate ComboBox-а. Там ответы на все вопросы.
...
Рейтинг: 0 / 0
Выравнивание выбранного в ComboBox элемента.
    #38485995
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНадо смотреть ControlTemplate ComboBox-а. Там ответы на все вопросы.
Определил шаблон элементов следующим образом:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<ComboBox x:FieldModifier="public" x:Name="cboSheetSets" Width="200" MinWidth="200" MaxWidth="300">
	<ComboBox.ItemTemplate>
		<DataTemplate>
			<ComboBoxItem Tag="{Binding Path=Tag}">
				<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
					<Image Source="{Binding Path=ImageSource}"/>
					<TextBlock Text="{Binding Path=Text}" Margin="2,1,1,0"/>
				</StackPanel>
			</ComboBoxItem>							
		</DataTemplate>
	</ComboBox.ItemTemplate>
</ComboBox>


В коде, посредством свойства ItemsSource, я указал источник данных для моего ComboBox. Обе перечисленных мною выше проблемы исчезли. Но появилась другая:



Если я кликаю мышкой на области, обведённой мною красным контуром, то список сворачивается и текущим становится выбранный мною элемент (как и положено). Но если я кликаю мышкой по тексту или иконке элементов списка, то происходит лишь подсвечивание указанного элемента в развёрнутом списке, но сам список не сворачивается и текущий элемент не устанавливается. Почему так происходит?
...
Рейтинг: 0 / 0
Выравнивание выбранного в ComboBox элемента.
    #38486051
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из DataTemplate убрать ComboBoxItem. Возможно поможет, если указать ему IsHitTestVisible=false, но лучше убрать.
...
Рейтинг: 0 / 0
Выравнивание выбранного в ComboBox элемента.
    #38486055
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИз DataTemplate убрать ComboBoxItem. Возможно поможет, если указать ему IsHitTestVisible=false, но лучше убрать.
А как мне в этом случае привязать информацию к свойству Tag элемента?
...
Рейтинг: 0 / 0
Выравнивание выбранного в ComboBox элемента.
    #38486064
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumАлексей КИз DataTemplate убрать ComboBoxItem. Возможно поможет, если указать ему IsHitTestVisible=false, но лучше убрать.
А как мне в этом случае привязать информацию к свойству Tag элемента?Во первых, ComboBoxItem создаётся автоматически, если добавляемый элемент не ComboBoxItem. На него можно сослаться через RelativeSource.

Во вторых, использование свойства Tag непонятно. Что это? Зачем?
...
Рейтинг: 0 / 0
Выравнивание выбранного в ComboBox элемента.
    #38486073
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВо вторых, использование свойства Tag непонятно. Что это? Зачем?
В этом свойстве я сохраняю ссылку на объект, который используется в коде обработки различных событий:
Код: c#
1.
2.
3.
4.
// Save the link to the custom control (it will be used in the event handlers):
control.cboSheetSets.Tag = control;
control.tree.Tag = control;
control.props.Tag = control;


Алексей КВозможно поможет, если указать ему IsHitTestVisible=false, но лучше убрать.
Это помогло, спасибо.
...
Рейтинг: 0 / 0
Выравнивание выбранного в ComboBox элемента.
    #38486078
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumАлексей КВо вторых, использование свойства Tag непонятно. Что это? Зачем?
В этом свойстве я сохраняю ссылку на объект, который используется в коде обработки различных событий:
Код: c#
1.
2.
3.
4.
// Save the link to the custom control (it will be used in the event handlers):
control.cboSheetSets.Tag = control;
control.tree.Tag = control;
control.props.Tag = control;

Для этого обычно используют ViewModel, живущую в DataContext.
CompositumАлексей КВозможно поможет, если указать ему IsHitTestVisible=false, но лучше убрать.
Это помогло, спасибо.Лучше переделать.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Выравнивание выбранного в ComboBox элемента.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]