Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,7 @@ private void OnCollectionChanged(object oldValue, object newValue)
var incc = (INotifyCollectionChanged)newValue;
_inccWeakEventListener = new WeakEventListener<RotatorTile, object, NotifyCollectionChangedEventArgs>(this)
{
OnEventAction = (instance, source, eventArgs) => instance.Incc_CollectionChanged(source, eventArgs),
OnEventAction = static (instance, source, eventArgs) => instance.Incc_CollectionChanged(source, eventArgs),
OnDetachAction = (listener) => incc.CollectionChanged -= listener.OnEvent
};
incc.CollectionChanged += _inccWeakEventListener.OnEvent;
Expand Down
134 changes: 81 additions & 53 deletions Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,80 @@ public RadialGauge()

SmallChange = 1;
LargeChange = 10;
Unloaded += RadialGauge_Unloaded;

// Small step
AddKeyboardAccelerator(VirtualKeyModifiers.None, VirtualKey.Left, static (_, kaea) =>
{
if (kaea.Element is RadialGauge gauge)
{
gauge.Value = Math.Max(gauge.Minimum, gauge.Value - Math.Max(gauge.StepSize, gauge.SmallChange));
kaea.Handled = true;
}
});

AddKeyboardAccelerator(VirtualKeyModifiers.None, VirtualKey.Up, static (_, kaea) =>
{
if (kaea.Element is RadialGauge gauge)
{
gauge.Value = Math.Min(gauge.Maximum, gauge.Value + Math.Max(gauge.StepSize, gauge.SmallChange));
kaea.Handled = true;
}
});

AddKeyboardAccelerator(VirtualKeyModifiers.None, VirtualKey.Right, static (_, kaea) =>
{
if (kaea.Element is RadialGauge gauge)
{
gauge.Value = Math.Min(gauge.Maximum, gauge.Value + Math.Max(gauge.StepSize, gauge.SmallChange));
kaea.Handled = true;
}
});

AddKeyboardAccelerator(VirtualKeyModifiers.None, VirtualKey.Down, static (_, kaea) =>
{
if (kaea.Element is RadialGauge gauge)
{
gauge.Value = Math.Max(gauge.Minimum, gauge.Value - Math.Max(gauge.StepSize, gauge.SmallChange));
kaea.Handled = true;
}
});

// Large step
AddKeyboardAccelerator(VirtualKeyModifiers.Control, VirtualKey.Left, static (_, kaea) =>
{
if (kaea.Element is RadialGauge gauge)
{
gauge.Value = Math.Max(gauge.Minimum, gauge.Value - Math.Max(gauge.StepSize, gauge.LargeChange));
kaea.Handled = true;
}
});

AddKeyboardAccelerator(VirtualKeyModifiers.Control, VirtualKey.Up, static (_, kaea) =>
{
if (kaea.Element is RadialGauge gauge)
{
gauge.Value = Math.Min(gauge.Maximum, gauge.Value + Math.Max(gauge.StepSize, gauge.LargeChange));
kaea.Handled = true;
}
});

AddKeyboardAccelerator(VirtualKeyModifiers.Control, VirtualKey.Right, static (_, kaea) =>
{
if (kaea.Element is RadialGauge gauge)
{
gauge.Value = Math.Min(gauge.Maximum, gauge.Value + Math.Max(gauge.StepSize, gauge.LargeChange));
kaea.Handled = true;
}
});

AddKeyboardAccelerator(VirtualKeyModifiers.Control, VirtualKey.Down, static (_, kaea) =>
{
if (kaea.Element is RadialGauge gauge)
{
gauge.Value = Math.Max(gauge.Minimum, gauge.Value - Math.Max(gauge.StepSize, gauge.LargeChange));
kaea.Handled = true;
}
});
}

private void ThemeListener_ThemeChanged(ThemeListener sender)
Expand All @@ -195,8 +268,8 @@ private void ThemeListener_ThemeChanged(ThemeListener sender)

private void RadialGauge_Unloaded(object sender, RoutedEventArgs e)
{
// Unregister event handlers.
KeyboardAccelerators.Clear();
// TODO: We should just use a WeakEventListener for ThemeChanged here, but ours currently doesn't support it.
// See proposal for general helper here: https://github.com/CommunityToolkit/dotnet/issues/404
ThemeListener.ThemeChanged -= ThemeListener_ThemeChanged;
PointerReleased -= RadialGauge_PointerReleased;
Unloaded -= RadialGauge_Unloaded;
Expand Down Expand Up @@ -407,6 +480,10 @@ protected override AutomationPeer OnCreateAutomationPeer()
/// </summary>
protected override void OnApplyTemplate()
{
PointerReleased -= RadialGauge_PointerReleased;
ThemeListener.ThemeChanged -= ThemeListener_ThemeChanged;
Unloaded -= RadialGauge_Unloaded;

// Remember local brushes.
_needleBrush = ReadLocalValue(NeedleBrushProperty) as SolidColorBrush;
_trailBrush = ReadLocalValue(TrailBrushProperty) as SolidColorBrush;
Expand All @@ -415,58 +492,9 @@ protected override void OnApplyTemplate()
_tickBrush = ReadLocalValue(TickBrushProperty) as SolidColorBrush;
_foreground = ReadLocalValue(ForegroundProperty) as SolidColorBrush;

// Small step
AddKeyboardAccelerator(VirtualKeyModifiers.None, VirtualKey.Left, (_, kaea) =>
{
Value = Math.Max(Minimum, Value - Math.Max(StepSize, SmallChange));
kaea.Handled = true;
});

AddKeyboardAccelerator(VirtualKeyModifiers.None, VirtualKey.Up, (_, kaea) =>
{
Value = Math.Min(Maximum, Value + Math.Max(StepSize, SmallChange));
kaea.Handled = true;
});

AddKeyboardAccelerator(VirtualKeyModifiers.None, VirtualKey.Right, (_, kaea) =>
{
Value = Math.Min(Maximum, Value + Math.Max(StepSize, SmallChange));
kaea.Handled = true;
});

AddKeyboardAccelerator(VirtualKeyModifiers.None, VirtualKey.Down, (_, kaea) =>
{
Value = Math.Max(Minimum, Value - Math.Max(StepSize, SmallChange));
kaea.Handled = true;
});

// Large step
AddKeyboardAccelerator(VirtualKeyModifiers.Control, VirtualKey.Left, (_, kaea) =>
{
Value = Math.Max(Minimum, Value - Math.Max(StepSize, LargeChange));
kaea.Handled = true;
});

AddKeyboardAccelerator(VirtualKeyModifiers.Control, VirtualKey.Up, (_, kaea) =>
{
Value = Math.Min(Maximum, Value + Math.Max(StepSize, LargeChange));
kaea.Handled = true;
});

AddKeyboardAccelerator(VirtualKeyModifiers.Control, VirtualKey.Right, (_, kaea) =>
{
Value = Math.Min(Maximum, Value + Math.Max(StepSize, LargeChange));
kaea.Handled = true;
});

AddKeyboardAccelerator(VirtualKeyModifiers.Control, VirtualKey.Down, (_, kaea) =>
{
Value = Math.Max(Minimum, Value - Math.Max(StepSize, LargeChange));
kaea.Handled = true;
});

PointerReleased += RadialGauge_PointerReleased;
ThemeListener.ThemeChanged += ThemeListener_ThemeChanged;
Unloaded += RadialGauge_Unloaded;

// Apply color scheme.
OnColorsChanged();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public InterspersedObservableCollection(object itemsSource)
{
var weakPropertyChangedListener = new WeakEventListener<InterspersedObservableCollection, object, NotifyCollectionChangedEventArgs>(this)
{
OnEventAction = (instance, source, eventArgs) => instance.ItemsSource_CollectionChanged(source, eventArgs),
OnEventAction = static (instance, source, eventArgs) => instance.ItemsSource_CollectionChanged(source, eventArgs),
OnDetachAction = (weakEventListener) => notifier.CollectionChanged -= weakEventListener.OnEvent // Use Local Reference Only
};
notifier.CollectionChanged += weakPropertyChangedListener.OnEvent;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public IList Source
new WeakEventListener<AdvancedCollectionView, object, NotifyCollectionChangedEventArgs>(this)
{
// Call the actual collection changed event
OnEventAction = (source, changed, arg3) => SourceNcc_CollectionChanged(source, arg3),
OnEventAction = static (instance, source, arg3) => instance.SourceNcc_CollectionChanged(source, arg3),

// The source doesn't exist anymore
OnDetachAction = (listener) => sourceNcc.CollectionChanged -= _sourceWeakEventListener.OnEvent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public FullScreenModeStateTrigger()
var weakEvent =
new WeakEventListener<FullScreenModeStateTrigger, ApplicationView, object>(this)
{
OnEventAction = (instance, source, eventArgs) => instance.FullScreenModeTrigger_VisibleBoundsChanged(source, eventArgs),
OnEventAction = static (instance, source, eventArgs) => instance.FullScreenModeTrigger_VisibleBoundsChanged(source, eventArgs),
OnDetachAction = (weakEventListener) => ApplicationView.GetForCurrentView().VisibleBoundsChanged -= weakEventListener.OnEvent
};
ApplicationView.GetForCurrentView().VisibleBoundsChanged += weakEvent.OnEvent;
Expand Down
12 changes: 6 additions & 6 deletions Microsoft.Toolkit.Uwp.UI/Triggers/IsNullOrEmptyStateTrigger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ private static void OnValuePropertyChanged(DependencyObject d, DependencyPropert
var valNotifyCollection = val as INotifyCollectionChanged;
if (valNotifyCollection != null)
{
var weakEvent = new WeakEventListener<INotifyCollectionChanged, object, NotifyCollectionChangedEventArgs>(valNotifyCollection)
var weakEvent = new WeakEventListener<IsNullOrEmptyStateTrigger, object, NotifyCollectionChangedEventArgs>(obj)
{
OnEventAction = (instance, source, args) => obj.SetActive(IsNullOrEmpty(instance)),
OnEventAction = static (instance, source, args) => instance.SetActive(IsNullOrEmpty(source)),
OnDetachAction = (weakEventListener) => valNotifyCollection.CollectionChanged -= weakEventListener.OnEvent
};

Expand All @@ -61,9 +61,9 @@ private static void OnValuePropertyChanged(DependencyObject d, DependencyPropert
var valObservableVector = val as IObservableVector<object>;
if (valObservableVector != null)
{
var weakEvent = new WeakEventListener<IObservableVector<object>, object, IVectorChangedEventArgs>(valObservableVector)
var weakEvent = new WeakEventListener<IsNullOrEmptyStateTrigger, object, IVectorChangedEventArgs>(obj)
{
OnEventAction = (instance, source, args) => obj.SetActive(IsNullOrEmpty(instance)),
OnEventAction = static (instance, source, args) => instance.SetActive(IsNullOrEmpty(source)),
OnDetachAction = (weakEventListener) => valObservableVector.VectorChanged -= weakEventListener.OnEvent
};

Expand All @@ -75,9 +75,9 @@ private static void OnValuePropertyChanged(DependencyObject d, DependencyPropert
var valObservableMap = val as IObservableMap<object, object>;
if (valObservableMap != null)
{
var weakEvent = new WeakEventListener<IObservableMap<object, object>, object, IMapChangedEventArgs<object>>(valObservableMap)
var weakEvent = new WeakEventListener<IsNullOrEmptyStateTrigger, object, IMapChangedEventArgs<object>>(obj)
{
OnEventAction = (instance, source, args) => obj.SetActive(IsNullOrEmpty(instance)),
OnEventAction = static (instance, source, args) => instance.SetActive(IsNullOrEmpty(source)),
OnDetachAction = (weakEventListener) => valObservableMap.MapChanged -= weakEventListener.OnEvent
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public NetworkConnectionStateTrigger()
var weakEvent =
new WeakEventListener<NetworkConnectionStateTrigger, object>(this)
{
OnEventAction = (instance, source) => NetworkInformation_NetworkStatusChanged(source),
OnEventAction = static (instance, source) => instance.NetworkInformation_NetworkStatusChanged(source),
OnDetachAction = (weakEventListener) => NetworkInformation.NetworkStatusChanged -= weakEventListener.OnEvent
};
NetworkInformation.NetworkStatusChanged += weakEvent.OnEvent;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public UserInteractionModeStateTrigger()
var weakEvent =
new WeakEventListener<UserInteractionModeStateTrigger, object, WindowSizeChangedEventArgs>(this)
{
OnEventAction = (instance, source, eventArgs) => UserInteractionModeTrigger_SizeChanged(source, eventArgs),
OnEventAction = static (instance, source, eventArgs) => instance.UserInteractionModeTrigger_SizeChanged(source, eventArgs),
OnDetachAction = (weakEventListener) => Window.Current.SizeChanged -= weakEventListener.OnEvent
};
Window.Current.SizeChanged += weakEvent.OnEvent;
Expand Down