Add Style
This commit is contained in:
parent
692187e0cb
commit
3f1b44d855
|
@ -85,13 +85,12 @@ namespace Ooui
|
||||||
|
|
||||||
protected bool SetProperty<T> (ref T backingStore, T newValue, string attributeName, [System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")
|
protected bool SetProperty<T> (ref T backingStore, T newValue, string attributeName, [System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")
|
||||||
{
|
{
|
||||||
if (!backingStore.Equals (newValue)) {
|
if (EqualityComparer<T>.Default.Equals (backingStore, newValue))
|
||||||
|
return false;
|
||||||
backingStore = newValue;
|
backingStore = newValue;
|
||||||
SendSet (attributeName, newValue);
|
SendSet (attributeName, newValue);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public const char IdPrefix = '\u2999';
|
public const char IdPrefix = '\u2999';
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using Value = System.Object;
|
||||||
|
|
||||||
|
namespace Ooui
|
||||||
|
{
|
||||||
|
public class Style : INotifyPropertyChanged
|
||||||
|
{
|
||||||
|
public event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
|
||||||
|
readonly Dictionary<string, Value> properties =
|
||||||
|
new Dictionary<string, Value> ();
|
||||||
|
|
||||||
|
public Value BackgroundColor {
|
||||||
|
get => GetProperty ("background-color");
|
||||||
|
set => SetProperty ("background-color", value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Value GetProperty (string propertyName)
|
||||||
|
{
|
||||||
|
lock (properties) {
|
||||||
|
Value p;
|
||||||
|
if (!properties.TryGetValue (propertyName, out p)) {
|
||||||
|
p = new Value ();
|
||||||
|
properties[propertyName] = p;
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetProperty (string propertyName, Value value)
|
||||||
|
{
|
||||||
|
lock (properties) {
|
||||||
|
Value old;
|
||||||
|
if (properties.TryGetValue (propertyName, out old)) {
|
||||||
|
if (EqualityComparer<Value>.Default.Equals (old, value))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
properties[propertyName] = value;
|
||||||
|
}
|
||||||
|
PropertyChanged?.Invoke (this, new PropertyChangedEventArgs (propertyName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
using System;
|
||||||
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
|
|
||||||
|
using Ooui;
|
||||||
|
|
||||||
|
namespace Tests
|
||||||
|
{
|
||||||
|
[TestClass]
|
||||||
|
public class StyleTests
|
||||||
|
{
|
||||||
|
[TestMethod]
|
||||||
|
public void ChangedWhen ()
|
||||||
|
{
|
||||||
|
var s = new Style ();
|
||||||
|
var changeCount = 0;
|
||||||
|
s.PropertyChanged += (_, e) => changeCount++;
|
||||||
|
s.BackgroundColor = "red";
|
||||||
|
Assert.AreEqual (1, changeCount);
|
||||||
|
s.BackgroundColor = "blue";
|
||||||
|
Assert.AreEqual (2, changeCount);
|
||||||
|
s.BackgroundColor = "blue";
|
||||||
|
Assert.AreEqual (2, changeCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue