aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Touch/Controls/TouchVirtualizedContentControl.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Tango.Touch/Controls/TouchVirtualizedContentControl.cs')
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchVirtualizedContentControl.cs99
1 files changed, 99 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchVirtualizedContentControl.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchVirtualizedContentControl.cs
new file mode 100644
index 000000000..02240ecc8
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchVirtualizedContentControl.cs
@@ -0,0 +1,99 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Markup;
+using System.Windows.Shapes;
+using Tango.Core.Threading;
+
+namespace Tango.Touch.Controls
+{
+ [ContentProperty(nameof(Content))]
+ public class TouchVirtualizedContentControl : Control
+ {
+ private LightTouchScrollViewer _scrollViewer;
+ private ContentPresenter _innerBorder;
+ private ActionTimer _updateTimer;
+ private Point _location;
+ private bool _loaded;
+
+ public UIElement Content
+ {
+ get { return (UIElement)GetValue(ContentProperty); }
+ set { SetValue(ContentProperty, value); }
+ }
+ public static readonly DependencyProperty ContentProperty =
+ DependencyProperty.Register("Content", typeof(UIElement), typeof(TouchVirtualizedContentControl), new PropertyMetadata(null));
+
+ static TouchVirtualizedContentControl()
+ {
+ DefaultStyleKeyProperty.OverrideMetadata(typeof(TouchVirtualizedContentControl), new FrameworkPropertyMetadata(typeof(TouchVirtualizedContentControl)));
+ }
+
+ public TouchVirtualizedContentControl()
+ {
+ _updateTimer = new ActionTimer(TimeSpan.FromMilliseconds(200));
+ Loaded += TouchVirtualizedContentControl_Loaded;
+ }
+
+ public override void OnApplyTemplate()
+ {
+ base.OnApplyTemplate();
+ _innerBorder = GetTemplateChild("PART_innerBorder") as ContentPresenter;
+ }
+
+ private void TouchVirtualizedContentControl_Loaded(object sender, System.Windows.RoutedEventArgs e)
+ {
+ _scrollViewer = this.FindAncestor<LightTouchScrollViewer>();
+ _scrollViewer.Scrolling += _scrollViewer_Scrolling;
+
+ _location = this.TranslatePoint(new Point(0, 0), _scrollViewer);
+
+ ApplyOptimization();
+ _loaded = true;
+ }
+
+ private void _scrollViewer_Scrolling(object sender, DoubleValueChangedEventArgs e)
+ {
+ if (_loaded)
+ {
+ //_updateTimer.ResetReplace(() =>
+ //{
+ // Dispatcher.BeginInvoke(new Action(() =>
+ // {
+ ApplyOptimization();
+ // }));
+ //});
+ }
+ }
+
+ private void ApplyOptimization()
+ {
+ //var _border_viewport = _scrollViewer.GetViewportBorder();
+
+ //if (_border_viewport.IsAncestorOf(this))
+ //{
+ // //Point relativeLocation = this.TranslatePoint(new Point(0, 0), _border_viewport);
+ // //Rect bounds = this.TransformToAncestor(_border_viewport).TransformBounds(new Rect(0.0, 0.0, this.ActualWidth, this.ActualHeight));
+ // //Rect rect = new Rect(0.0, 0.0, _border_viewport.ActualWidth, _border_viewport.ActualHeight);
+ // if (_location.Y > _scrollViewer.GetScrollPosition() && _location.Y < _scrollViewer.GetScrollPosition() + _border_viewport.ActualHeight)
+ // {
+ // if (_innerBorder.Visibility == Visibility.Hidden)
+ // {
+ // _innerBorder.Visibility = Visibility.Visible;
+ // }
+ // }
+ // else
+ // {
+ // if (_innerBorder.Visibility == Visibility.Visible)
+ // {
+ // _innerBorder.Visibility = Visibility.Hidden;
+ // }
+ // }
+ //}
+ }
+ }
+}