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]

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.

C# 2017/2015/2013 Aufbau

In dieser Schulung lernen Sie fortgeschrittene Techniken im Bereich .Net C#. Dabei stehen neben den eigentlichen Techniken auch architektonische Aspekte im Mittelpunkt.

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!