Feedback

C# - Schachbrettmuster in UWP

Veröffentlicht von am 06.06.2016
(0 Bewertungen)
Da es in UWP keinen DrawingBrush gibt ist es in den meisten Fällen recht aufwendig ein Schachbrettmuster zu erzeugen.
Mit Hilfe von Win2D kann man zum Glück relativ einfach ein solches Muster auf ein Control rendern. Um das zu vereinfachen habe ich dieses Control geschrieben.

Die HorizontalMode- und VerticalMode-Eigenschaften geben an, wie die Werte in Horizontal und Vertical behandelt werden. Die zuletzt genannten bestimmen im Pixel-Modus wie lang ein Kästchen an der jeweiligen Seite ist, im Count-Modus gibt der Wert die Gesamtzahl an Kästchen an der jeweiligen Seite an.

Der gezeigte Code läuft in dieser Form in UWP, sofern das Win2D.uwp Package installiert wird.

Klasse auf GitHub: http://bit.ly/1TWBHBY
Win2D auf NuGet: http://bit.ly/1TDsCeB
Screenshot vom Ergebnis: http://bit.ly/1TSc13R
GFU-Schulungen  [Anzeige]

VB.NET 2017/2015/2013 Aufbau

Nach dieser Schulung können Sie mittels objektorientierter Modelle in VB.NET 2017/2015/2013 wiederverwendbare Elemente eigenständig erstellen.

ASP.NET Core - Der Einstieg

In nur 3 Tagen lernen Sie, wie man mit ASP.NET Core und den Technologien MVC, Entity Framework, WebAPI und Razor professionelle Web-Anwendungs-Architekturen aufbaut. Diese Schulung ist der perfekte Einstieg, um datengetriebene und präsentations-orientierte Applikationen auf Basis der ASP.NET Core Plattform zu erstellen.

using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Microsoft.Graphics.Canvas.UI.Xaml;

namespace Koopakiller.Apps.UwpAppDevelopmentHelper.Controls
{
    public class Plaid : UserControl
    {
        public Plaid()
        {
            var cc = new CanvasControl();
            cc.Draw += this.OnDraw;
            this.Content = cc;
        }

        protected virtual void OnDraw(CanvasControl sender, CanvasDrawEventArgs args)
        {
            var cx = (float)(this.HorizontalMode == PlaidMode.Count ? this.ActualWidth / this.Horizontal : this.Horizontal);
            var cy = (float)(this.VerticalMode == PlaidMode.Count ? this.ActualHeight / this.Horizontal : this.Horizontal);

            for (var x = 0; x * cx < this.ActualWidth; ++x)
            {
                for (var y = 0; y * cy < this.ActualHeight; ++y)
                {
                    args.DrawingSession.FillRectangle(x * cx, y * cy, cx, cy, x % 2 == y % 2 ? this.FirstColor : this.SecondColor);
                }
            }
        }

        #region Properties

        public Color FirstColor
        {
            get { return (Color)this.GetValue(FirstColorProperty); }
            set { this.SetValue(FirstColorProperty, value); }
        }

        public Color SecondColor
        {
            get { return (Color)this.GetValue(SecondColorProperty); }
            set { this.SetValue(SecondColorProperty, value); }
        }

        public double Horizontal
        {
            get { return (double)this.GetValue(HorizontalProperty); }
            set { this.SetValue(HorizontalProperty, value); }
        }

        public double Vertical
        {
            get { return (double)this.GetValue(VerticalProperty); }
            set { this.SetValue(VerticalProperty, value); }
        }

        public PlaidMode HorizontalMode
        {
            get { return (PlaidMode)this.GetValue(HorizontalModeProperty); }
            set { this.SetValue(HorizontalModeProperty, value); }
        }

        public PlaidMode VerticalMode
        {
            get { return (PlaidMode)this.GetValue(VerticalModeProperty); }
            set { this.SetValue(VerticalModeProperty, value); }
        }

        #endregion

        #region Dependency Properties

        public static readonly DependencyProperty FirstColorProperty = DependencyProperty.Register(nameof(FirstColor), typeof(Color), typeof(Plaid), new PropertyMetadata(Colors.Black));
        public static readonly DependencyProperty SecondColorProperty = DependencyProperty.Register(nameof(SecondColor), typeof(Color), typeof(Plaid), new PropertyMetadata(Colors.White));
        public static readonly DependencyProperty HorizontalProperty = DependencyProperty.Register(nameof(Horizontal), typeof(double), typeof(Plaid), new PropertyMetadata(25D));
        public static readonly DependencyProperty VerticalProperty = DependencyProperty.Register(nameof(Vertical), typeof(double), typeof(Plaid), new PropertyMetadata(25D));
        public static readonly DependencyProperty HorizontalModeProperty = DependencyProperty.Register(nameof(HorizontalMode), typeof(PlaidMode), typeof(Plaid), new PropertyMetadata(PlaidMode.Count));
        public static readonly DependencyProperty VerticalModeProperty = DependencyProperty.Register(nameof(VerticalMode), typeof(PlaidMode), typeof(Plaid), new PropertyMetadata(PlaidMode.Count));

        #endregion

    }

    public enum PlaidMode
    {
        Count,
        Pixel,
    }
}

Abgelegt unter UWP, Win2D, Plaid, Schachbrett, DrawingBrush.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!