Moved Validation Error tracking to attached an attached property
Created an shared error indicator that can be simply added to control
templates and re-styled across all controls
This should reduce the need for code and markup duplication while
allowing for a consistent visual interface
The test .cs files stay in the `Avalonia.RenderTests` directory but the D2D and Skia render test .csprojs are moved to their own directory: include the test files by using a glob in the .csproj.
This avoids the hack we were having to do to get `BaseIntermediateOutputPath` to work - we no longer have this problem as now each .csproj has its own directory, it can use the default directory for intermediate files.
There were a number of problems with `Geometry` and its subclasses and platform implementations. Fix these, for more details see the PR that this commit is a part of.
- Share common layout logic between `Border`, `ContentPresenter` and `ScrollContentPresenter`
- Added a bunch of tests for things not previously convered
- Fix `ScrollContentPresenter` child layout
Instead of using `Observable.ObserveOn` in bindings, interface with `Dispatcher.UIThread` to schedule binding notifications on the UI thread. This saves a significant amount of memory.
We're potentially creating a new immutable version of the opacity mask each time the `VisualNode` is updated. Need to implement comparison between mutable and immutable brushes.
Previously we were creating a new render layer for all controls with `Opacity != 1`. This was causing the `Calendar` page in ControlCatalog to render _really_ slowly. Instead, only create a new render layer when `Opacity` is being animated.
Also don't even render controls where `Opacity == 0`.
`TemplateBinding_With_Null_Path_Works` is a failing test for #1303, also added a passing test for the same thing with `Binding`: `Binding_With_Null_Path_Works`.