1
0
mirror of https://github.com/DarthAffe/RGB.NET.git synced 2025-12-13 01:58:30 +00:00
RGB.NET/RGB.NET.WPF/Controls/RGBDeviceVisualizer.cs
Darth Affe dcaebd2b3b Added first working version of a WPF-RGBSurface
(needs tons of work though, performance is bad and it doesn't look too good so far)
2017-01-29 20:14:57 +01:00

77 lines
2.0 KiB
C#

using System.Windows;
using System.Windows.Controls;
using RGB.NET.Core;
namespace RGB.NET.WPF.Controls
{
/// <summary>
/// Visualizes a <see cref="IRGBDevice"/> in an wpf-application.
/// </summary>
[TemplatePart(Name = PART_CANVAS, Type = typeof(Canvas))]
public class RGBDeviceVisualizer : Control
{
#region Constants
private const string PART_CANVAS = "PART_Canvas";
#endregion
#region Properties & Fields
private Canvas _canvas;
#endregion
#region DependencyProperties
// ReSharper disable InconsistentNaming
/// <summary>
/// Backing-property for the <see cref="Device"/>-property.
/// </summary>
public static readonly DependencyProperty DeviceProperty = DependencyProperty.Register(
"Device", typeof(IRGBDevice), typeof(RGBDeviceVisualizer), new PropertyMetadata(default(IRGBDevice), DeviceChanged));
/// <summary>
/// Gets or sets the <see cref="IRGBDevice"/> to visualize.
/// </summary>
public IRGBDevice Device
{
get { return (IRGBDevice)GetValue(DeviceProperty); }
set { SetValue(DeviceProperty, value); }
}
// ReSharper restore InconsistentNaming
#endregion
#region Methods
/// <inheritdoc />
public override void OnApplyTemplate()
{
_canvas = (Canvas)GetTemplateChild(PART_CANVAS);
LayoutLeds();
}
private static void DeviceChanged(DependencyObject dependencyObject,
DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
((RGBDeviceVisualizer)dependencyObject).LayoutLeds();
}
private void LayoutLeds()
{
if (_canvas == null) return;
_canvas.Children.Clear();
if (Device == null) return;
foreach (Led led in Device)
_canvas.Children.Add(new LedVisualizer { Led = led });
}
#endregion
}
}