From e774f9a90fd812a9de8c3efe966a759bee8be703 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Wed, 11 Mar 2020 03:41:20 +0200 Subject: Working on FSE/PPC performance provider. Implemented resolution service. a lot of work! --- .../Tango.SharedUI/Controls/NavigationControl.cs | 26 ++++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'Software/Visual_Studio/Tango.SharedUI/Controls/NavigationControl.cs') diff --git a/Software/Visual_Studio/Tango.SharedUI/Controls/NavigationControl.cs b/Software/Visual_Studio/Tango.SharedUI/Controls/NavigationControl.cs index 15d15decb..ce1fca7ac 100644 --- a/Software/Visual_Studio/Tango.SharedUI/Controls/NavigationControl.cs +++ b/Software/Visual_Studio/Tango.SharedUI/Controls/NavigationControl.cs @@ -22,7 +22,9 @@ namespace Tango.SharedUI.Controls public class NavigationControl : UserControl { private event Action NavigationCompleted; + public event EventHandler SelectedElementChanged; private Thread _navigationThread; + private bool _preventSelectedObjectNavigation; private ProducerConsumerQueue _navigationQueue; private class NavigationQueueItem @@ -191,14 +193,12 @@ namespace Tango.SharedUI.Controls get { return (object)GetValue(SelectedObjectProperty); } set { SetValue(SelectedObjectProperty, value); } } - - // Using a DependencyProperty as the backing store for SelectedObject. This enables animation, styling, binding, etc... public static readonly DependencyProperty SelectedObjectProperty = - DependencyProperty.Register("SelectedObject", typeof(object), typeof(NavigationControl), new PropertyMetadata(null, (d, e) => (d as NavigationControl).OnSelectedObjectChanged())); + DependencyProperty.Register("SelectedObject", typeof(object), typeof(NavigationControl), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, (d, e) => (d as NavigationControl).OnSelectedObjectChanged())); private void OnSelectedObjectChanged() { - if (SelectedObject != null) + if (SelectedObject != null && !_preventSelectedObjectNavigation) { NavigateTo(SelectedObject); } @@ -218,7 +218,7 @@ namespace Tango.SharedUI.Controls set { SetValue(SelectedElementProperty, value); } } public static readonly DependencyProperty SelectedElementProperty = - DependencyProperty.Register("SelectedElement", typeof(FrameworkElement), typeof(NavigationControl), new PropertyMetadata(null, (d, e) => (d as NavigationControl).OnSelectedElementChanged(e.OldValue as FrameworkElement, e.NewValue as FrameworkElement))); + DependencyProperty.Register("SelectedElement", typeof(FrameworkElement), typeof(NavigationControl), new FrameworkPropertyMetadata(null, (d, e) => (d as NavigationControl).OnSelectedElementChanged(e.OldValue as FrameworkElement, e.NewValue as FrameworkElement))); public TransitionTypes TransitionType { @@ -310,7 +310,9 @@ namespace Tango.SharedUI.Controls /// public static String GetNavigationName(FrameworkElement element) { - return element.GetValue(NavigationName).ToStringSafe(); + var name = element.GetValue(NavigationName).ToStringSafe(); + if (String.IsNullOrEmpty(name)) name = element.GetType().Name; + return name; } #endregion @@ -383,6 +385,8 @@ namespace Tango.SharedUI.Controls } else { + Elements.ToList().ForEach(x => x.FocusVisualStyle = null); + var toRemove = _grid.Children.OfType().ToList().Where(x => !Elements.Contains(x.Element)).ToList(); var toAdd = Elements.Where(x => !_grid.Children.OfType().Select(y => y.Element).ToList().Contains(x)).ToList(); @@ -622,6 +626,14 @@ namespace Tango.SharedUI.Controls protected virtual void OnSelectedElementChanged(FrameworkElement fromElement, FrameworkElement toElement) { Navigate(GetElementContainer(fromElement), GetElementContainer(toElement)); + SelectedElementChanged?.Invoke(this, toElement); + + if (toElement != null) + { + _preventSelectedObjectNavigation = true; + SelectedObject = GetNavigationName(toElement); + _preventSelectedObjectNavigation = false; + } } #endregion @@ -696,7 +708,7 @@ namespace Tango.SharedUI.Controls FrameworkElement view = null; - view = NavigateTo(navigationName, () => + view = NavigateTo(navigationName, () => { source.SetResult(view); }); -- cgit v1.3.1