Skip to content

Commit b9d91e4

Browse files
committed
item alignment for no selected item
updates style item alignment for no selected item, style not working yet
1 parent 0ed31ce commit b9d91e4

File tree

2 files changed

+36
-10
lines changed

2 files changed

+36
-10
lines changed

source/iNKORE.UI.WPF.Modern/Controls/Helpers/ComboBoxHelper.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License. See LICENSE in the project root for license information.
33

4+
using System;
45
using iNKORE.UI.WPF.Converters;
56
using iNKORE.UI.WPF.Helpers;
67
using iNKORE.UI.WPF.Modern.Common.Converters;
@@ -118,7 +119,7 @@ private static void UpdateCornerRadius(ComboBox comboBox, bool isDropDownOpen)
118119
bool isOpenDown = IsPopupOpenDown(comboBox, popup.VerticalOffset);
119120

120121
if (isOpenDown &&
121-
comboBox.ItemContainerGenerator.ContainerFromItem(comboBox.SelectedItem) is FrameworkElement itemContainer &&
122+
GetToAlignContainer(comboBox) is { } itemContainer &&
122123
itemContainer.TranslatePoint(new Point(0, -itemContainer.ActualHeight + comboBox.Padding.Top), comboBox) is { Y: not 0 } itemTop)
123124
{
124125
popup.VerticalOffset -= itemTop.Y;
@@ -169,6 +170,28 @@ private static void UpdateCornerRadius(ComboBox comboBox, bool isDropDownOpen)
169170
highlightBackground.CornerRadius = textBoxRadius;
170171
}
171172
}
173+
174+
static FrameworkElement? GetToAlignContainer(ComboBox comboBox)
175+
{
176+
DependencyObject container;
177+
if (comboBox.SelectedItem is null)
178+
{
179+
container = comboBox.ItemContainerGenerator.ContainerFromIndex(
180+
(int)Math.Ceiling(comboBox.Items.Count / 2.0));
181+
182+
if (comboBox.ItemContainerGenerator.ContainerFromIndex(0) is ComboBoxItem item)
183+
{
184+
//item.IsSelected = true;
185+
//item.IsPseudoSelected = true;
186+
}
187+
}
188+
else
189+
{
190+
container = comboBox.ItemContainerGenerator.ContainerFromItem(comboBox.SelectedItem);
191+
}
192+
193+
return container as FrameworkElement;
194+
}
172195
}
173196

174197
private static CornerRadius GetFilteredPopupRadius(CornerRadius popupRadius, bool isOpenDown)

source/iNKORE.UI.WPF.Modern/Themes/Controls/ComboBox.xaml

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
<Setter Property="KeyboardNavigation.TabNavigation" Value="Local" />
5454
<Setter Property="Padding" Value="{DynamicResource ComboBoxItemThemePadding}" />
5555
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
56-
<Setter Property="VerticalContentAlignment" Value="Center" />
5756
<Setter Property="FocusVisualStyle" Value="{DynamicResource {x:Static SystemParameters.FocusVisualStyleKey}}" />
5857
<Setter Property="chelper:FocusVisualHelper.FocusVisualMargin" Value="-3" />
5958
<Setter Property="chelper:FocusVisualHelper.UseSystemFocusVisuals" Value="True" />
@@ -146,7 +145,7 @@
146145
</MultiTrigger.Conditions>
147146
<Setter TargetName="LayoutRoot" Property="Background" Value="{DynamicResource ComboBoxItemBackgroundPointerOver}" />
148147
<Setter TargetName="LayoutRoot" Property="BorderBrush" Value="{DynamicResource ComboBoxItemBorderBrushPointerOver}" />
149-
<Setter Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundPointerOver}" />
148+
<Setter TargetName="ContentPresenter" Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundPointerOver}" />
150149
</MultiTrigger>
151150
<MultiTrigger>
152151
<MultiTrigger.Conditions>
@@ -155,7 +154,7 @@
155154
</MultiTrigger.Conditions>
156155
<Setter TargetName="LayoutRoot" Property="Background" Value="{DynamicResource ComboBoxItemBackgroundPressed}" />
157156
<Setter TargetName="LayoutRoot" Property="BorderBrush" Value="{DynamicResource ComboBoxItemBorderBrushPressed}" />
158-
<Setter Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundPressed}" />
157+
<Setter TargetName="ContentPresenter" Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundPressed}" />
159158
</MultiTrigger>
160159
<MultiTrigger>
161160
<MultiTrigger.Conditions>
@@ -164,14 +163,14 @@
164163
</MultiTrigger.Conditions>
165164
<Setter TargetName="LayoutRoot" Property="Background" Value="{DynamicResource ComboBoxItemBackgroundDisabled}" />
166165
<Setter TargetName="LayoutRoot" Property="BorderBrush" Value="{DynamicResource ComboBoxItemBorderBrushDisabled}" />
167-
<Setter Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundDisabled}" />
166+
<Setter TargetName="ContentPresenter" Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundDisabled}" />
168167
</MultiTrigger>
169168
<!-- Selected -->
170169
<Trigger Property="IsSelected" Value="True">
171170
<Setter TargetName="Pill" Property="Opacity" Value="1" />
172171
<Setter TargetName="LayoutRoot" Property="Background" Value="{DynamicResource ComboBoxItemBackgroundSelected}" />
173172
<Setter TargetName="LayoutRoot" Property="BorderBrush" Value="{DynamicResource ComboBoxItemBorderBrushSelected}" />
174-
<Setter Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundSelected}" />
173+
<Setter TargetName="ContentPresenter" Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundSelected}" />
175174
</Trigger>
176175
<!-- SelectedFocused -->
177176
<MultiTrigger>
@@ -189,39 +188,43 @@
189188
<Condition Property="IsSelected" Value="True" />
190189
<Condition Property="IsFocused" Value="False" />
191190
</MultiTrigger.Conditions>
191+
<Setter TargetName="Pill" Property="Opacity" Value="1" />
192192
<Setter TargetName="LayoutRoot" Property="Background" Value="{DynamicResource ComboBoxItemBackgroundSelectedUnfocused}" />
193193
<Setter TargetName="LayoutRoot" Property="BorderBrush" Value="{DynamicResource ComboBoxItemBorderBrushSelectedUnfocused}" />
194-
<Setter Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundSelectedUnfocused}" />
194+
<Setter TargetName="ContentPresenter" Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundSelectedUnfocused}" />
195195
</MultiTrigger>
196196
<!-- SelectedDisabled -->
197197
<MultiTrigger>
198198
<MultiTrigger.Conditions>
199199
<Condition Property="IsSelected" Value="True" />
200200
<Condition Property="IsEnabled" Value="False" />
201201
</MultiTrigger.Conditions>
202+
<Setter TargetName="Pill" Property="Opacity" Value="1" />
202203
<Setter TargetName="LayoutRoot" Property="Background" Value="{DynamicResource ComboBoxItemBackgroundSelectedDisabled}" />
203204
<Setter TargetName="LayoutRoot" Property="BorderBrush" Value="{DynamicResource ComboBoxItemBorderBrushSelectedDisabled}" />
204-
<Setter Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundSelectedDisabled}" />
205+
<Setter TargetName="ContentPresenter" Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundSelectedDisabled}" />
205206
</MultiTrigger>
206207
<!-- SelectedPointerOver -->
207208
<MultiTrigger>
208209
<MultiTrigger.Conditions>
209210
<Condition Property="IsSelected" Value="True" />
210211
<Condition Property="IsMouseOver" Value="True" />
211212
</MultiTrigger.Conditions>
213+
<Setter TargetName="Pill" Property="Opacity" Value="1" />
212214
<Setter TargetName="LayoutRoot" Property="Background" Value="{DynamicResource ComboBoxItemBackgroundSelectedPointerOver}" />
213215
<Setter TargetName="LayoutRoot" Property="BorderBrush" Value="{DynamicResource ComboBoxItemBorderBrushSelectedPointerOver}" />
214-
<Setter Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundSelectedPointerOver}" />
216+
<Setter TargetName="ContentPresenter" Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundSelectedPointerOver}" />
215217
</MultiTrigger>
216218
<!-- SelectedPressed -->
217219
<MultiTrigger>
218220
<MultiTrigger.Conditions>
219221
<Condition Property="IsSelected" Value="True" />
220222
<Condition SourceName="LayoutRoot" Property="chelper:PressHelper.IsPressed" Value="True" />
221223
</MultiTrigger.Conditions>
224+
<Setter TargetName="Pill" Property="Opacity" Value="1" />
222225
<Setter TargetName="LayoutRoot" Property="Background" Value="{DynamicResource ComboBoxItemBackgroundSelectedPressed}" />
223226
<Setter TargetName="LayoutRoot" Property="BorderBrush" Value="{DynamicResource ComboBoxItemBorderBrushSelectedPressed}" />
224-
<Setter Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundSelectedPressed}" />
227+
<Setter TargetName="ContentPresenter" Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundSelectedPressed}" />
225228
</MultiTrigger>
226229
</ControlTemplate.Triggers>
227230
</ControlTemplate>

0 commit comments

Comments
 (0)