Skip to content

Commit 6d78c42

Browse files
committed
Fixing hover margin
1 parent 320984b commit 6d78c42

File tree

2 files changed

+88
-1
lines changed

2 files changed

+88
-1
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
namespace CommunityToolkit.Labs.WinUI;
6+
public partial class SegmentedMarginConverter : DependencyObject, IValueConverter
7+
{
8+
/// <summary>
9+
/// Identifies the <see cref="LeftItemMargin"/> property.
10+
/// </summary>
11+
public static readonly DependencyProperty LeftItemMarginProperty =
12+
DependencyProperty.Register(nameof(LeftItemMargin), typeof(Thickness), typeof(SegmentedMarginConverter), new PropertyMetadata(null));
13+
14+
/// <summary>
15+
/// Gets or sets the margin of the first item
16+
/// </summary>
17+
public Thickness LeftItemMargin
18+
{
19+
get { return (Thickness)GetValue(LeftItemMarginProperty); }
20+
set { SetValue(LeftItemMarginProperty, value); }
21+
}
22+
23+
/// <summary>
24+
/// Identifies the <see cref="MiddleItemMargin"/> property.
25+
/// </summary>
26+
public static readonly DependencyProperty MiddleItemMarginProperty =
27+
DependencyProperty.Register(nameof(MiddleItemMargin), typeof(Thickness), typeof(SegmentedMarginConverter), new PropertyMetadata(null));
28+
29+
/// <summary>
30+
/// Gets or sets the margin of any middle item
31+
/// </summary>
32+
public Thickness MiddleItemMargin
33+
{
34+
get { return (Thickness)GetValue(MiddleItemMarginProperty); }
35+
set { SetValue(MiddleItemMarginProperty, value); }
36+
}
37+
38+
/// <summary>
39+
/// Identifies the <see cref="RightItemMargin"/> property.
40+
/// </summary>
41+
public static readonly DependencyProperty RightItemMarginProperty =
42+
DependencyProperty.Register(nameof(RightItemMargin), typeof(Thickness), typeof(SegmentedMarginConverter), new PropertyMetadata(null));
43+
44+
/// <summary>
45+
/// Gets or sets the margin of the last item
46+
/// </summary>
47+
public Thickness RightItemMargin
48+
{
49+
get { return (Thickness)GetValue(RightItemMarginProperty); }
50+
set { SetValue(RightItemMarginProperty, value); }
51+
}
52+
53+
public object Convert(object value, Type targetType, object parameter, string language)
54+
{
55+
var segmentedItem = value as SegmentedItem;
56+
var listView = ItemsControl.ItemsControlFromItemContainer(segmentedItem);
57+
58+
int index = listView.IndexFromContainer(segmentedItem);
59+
60+
if (index == 0)
61+
{
62+
return LeftItemMargin;
63+
}
64+
else if (index == listView.Items.Count - 1)
65+
{
66+
return RightItemMargin;
67+
}
68+
else
69+
{
70+
return MiddleItemMargin;
71+
}
72+
}
73+
74+
public object ConvertBack(object value, Type targetType, object parameter, string language)
75+
{
76+
return value;
77+
}
78+
}

components/SegmentedControl/src/SegmentedItem/SegmentedItem.xaml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,15 @@
263263
<Style BasedOn="{StaticResource DefaultSegmentedItemStyle}"
264264
TargetType="labs:SegmentedItem" />
265265

266+
<labs:SegmentedMarginConverter x:Name="MarginConverter"
267+
LeftItemMargin="{StaticResource LeftItemHoverMargin}"
268+
MiddleItemMargin="{StaticResource MiddleItemHoverMargin}"
269+
RightItemMargin="{StaticResource RightItemHoverMargin}" />
270+
271+
<Thickness x:Key="LeftItemHoverMargin">3, 3, 1, 3</Thickness>
272+
<Thickness x:Key="MiddleItemHoverMargin">1, 3, 1, 3</Thickness>
273+
<Thickness x:Key="RightItemHoverMargin">1, 3, 3, 3</Thickness>
274+
266275
<Style x:Key="DefaultSegmentedItemStyle"
267276
TargetType="labs:SegmentedItem">
268277
<Style.Setters>
@@ -426,7 +435,7 @@
426435
</VisualStateManager.VisualStateGroups>
427436

428437
<Border x:Name="PART_Hover"
429-
Margin="3"
438+
Margin="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource MarginConverter}}"
430439
Background="Transparent"
431440
CornerRadius="2"
432441
RenderTransformOrigin="0.5, 0.5">

0 commit comments

Comments
 (0)