diff --git a/src/Perspex.Styling/Perspex.Styling.csproj b/src/Perspex.Styling/Perspex.Styling.csproj
index 8338d5a714..56b046d70e 100644
--- a/src/Perspex.Styling/Perspex.Styling.csproj
+++ b/src/Perspex.Styling/Perspex.Styling.csproj
@@ -48,6 +48,7 @@
+
@@ -56,6 +57,7 @@
+
diff --git a/src/Perspex.Styling/Styling/ISetter.cs b/src/Perspex.Styling/Styling/ISetter.cs
new file mode 100644
index 0000000000..2520efca3e
--- /dev/null
+++ b/src/Perspex.Styling/Styling/ISetter.cs
@@ -0,0 +1,18 @@
+namespace Perspex.Styling
+{
+ using System;
+
+ ///
+ /// Represents a setter for a .
+ ///
+ public interface ISetter
+ {
+ ///
+ /// Applies the setter to the control.
+ ///
+ /// The style that is being applied.
+ /// The control.
+ /// An optional activator.
+ void Apply(IStyle style, IStyleable control, IObservable activator);
+ }
+}
\ No newline at end of file
diff --git a/src/Perspex.Styling/Styling/IStyle.cs b/src/Perspex.Styling/Styling/IStyle.cs
index 711c79ad28..75232c1531 100644
--- a/src/Perspex.Styling/Styling/IStyle.cs
+++ b/src/Perspex.Styling/Styling/IStyle.cs
@@ -6,8 +6,15 @@
namespace Perspex.Styling
{
+ ///
+ /// Defines the interface for styles.
+ ///
public interface IStyle
{
+ ///
+ /// Attaches the style to a control if the style matches.
+ ///
+ /// The control to attach to.
void Attach(IStyleable control);
}
}
diff --git a/src/Perspex.Styling/Styling/ObservableSetter.cs b/src/Perspex.Styling/Styling/ObservableSetter.cs
new file mode 100644
index 0000000000..7b0f504d2f
--- /dev/null
+++ b/src/Perspex.Styling/Styling/ObservableSetter.cs
@@ -0,0 +1,68 @@
+// -----------------------------------------------------------------------
+//
+// Copyright 2015 MIT Licence. See licence.md for more information.
+//
+// -----------------------------------------------------------------------
+
+namespace Perspex.Styling
+{
+ using System;
+
+ ///
+ /// A setter for a whose source is an observable.
+ ///
+ ///
+ /// A is used to set a value on a
+ /// depending on a condition.
+ ///
+ public class ObservableSetter : ISetter
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The property to set.
+ /// An observable which produces the value for the property.
+ public ObservableSetter(PerspexProperty property, IObservable