Browse Source

Slyecoping.

pull/83/head
Steven Kirk 11 years ago
parent
commit
5dc0e604fb
  1. 9
      Tests/Perspex.Base.UnitTests/GlobalSuppressions.cs
  2. 9
      Tests/Perspex.Controls.UnitTests/GlobalSuppressions.cs
  3. 9
      Tests/Perspex.Direct2D1.UnitTests/GlobalSuppressions.cs
  4. 9
      Tests/Perspex.Input.UnitTests/GlobalSuppressions.cs
  5. 9
      Tests/Perspex.Interactivity.UnitTests/GlobalSuppressions.cs
  6. 9
      Tests/Perspex.Layout.UnitTests/GlobalSuppressions.cs
  7. 9
      Tests/Perspex.RenderTests/GlobalSuppressions.cs
  8. 9
      Tests/Perspex.SceneGraph.UnitTests/GlobalSuppressions.cs
  9. 9
      Tests/Perspex.Styling.UnitTests/GlobalSuppressions.cs
  10. 21
      src/Markup/Perspex.Markup.Xaml/Context/PerspexObjectAssembler.cs
  11. 25
      src/Markup/Perspex.Markup.Xaml/Context/PerspexParserFactory.cs
  12. 8
      src/Markup/Perspex.Markup.Xaml/Context/PerspexTypeRepository.cs
  13. 13
      src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs
  14. 8
      src/Markup/Perspex.Markup.Xaml/Context/PerspexXamlMember.cs
  15. 34
      src/Markup/Perspex.Markup.Xaml/Context/PerspexXamlMemberValuePlugin.cs
  16. 10
      src/Markup/Perspex.Markup.Xaml/Context/PerspexXamlType.cs
  17. 6
      src/Markup/Perspex.Markup.Xaml/Converters/BitmapConverter.cs
  18. 6
      src/Markup/Perspex.Markup.Xaml/Converters/BrushConverter.cs
  19. 8
      src/Markup/Perspex.Markup.Xaml/Converters/GridLengthTypeConverter.cs
  20. 8
      src/Markup/Perspex.Markup.Xaml/Converters/ThicknessConverter.cs
  21. 32
      src/Markup/Perspex.Markup.Xaml/DataBinding/ChangeTracking/ObservablePropertyBranch.cs
  22. 17
      src/Markup/Perspex.Markup.Xaml/DataBinding/ChangeTracking/PropertyMountPoint.cs
  23. 14
      src/Markup/Perspex.Markup.Xaml/DataBinding/ChangeTracking/PropertyPath.cs
  24. 22
      src/Markup/Perspex.Markup.Xaml/DataBinding/ChangeTracking/TargettedProperty.cs
  25. 44
      src/Markup/Perspex.Markup.Xaml/DataBinding/DataContextChangeSynchronizer.cs
  26. 10
      src/Markup/Perspex.Markup.Xaml/DataBinding/IPerspexPropertyBinder.cs
  27. 18
      src/Markup/Perspex.Markup.Xaml/DataBinding/PerspexPropertyBinder.cs
  28. 11
      src/Markup/Perspex.Markup.Xaml/DataBinding/SourceBindingEndpoint.cs
  29. 11
      src/Markup/Perspex.Markup.Xaml/DataBinding/TargetBindingEndpoint.cs
  30. 37
      src/Markup/Perspex.Markup.Xaml/DataBinding/XamlBinding.cs
  31. 16
      src/Markup/Perspex.Markup.Xaml/DataBinding/XamlBindingDefinition.cs
  32. 18
      src/Markup/Perspex.Markup.Xaml/MarkupExtensions/BindingExtension.cs
  33. 18
      src/Markup/Perspex.Markup.Xaml/MarkupExtensions/TypeExtension.cs
  34. 6
      src/Markup/Perspex.Markup.Xaml/Templates/Template.cs
  35. 10
      src/Markup/Perspex.Markup.Xaml/Templates/TemplateContent.cs
  36. 6
      src/Markup/Perspex.Markup.Xaml/Templates/TemplateLoader.cs
  37. 19
      src/Markup/Perspex.Markup.Xaml/Templates/XamlDataTemplate.cs
  38. 1
      src/Perspex.Animation/Perspex.Animation.csproj
  39. 1
      src/Perspex.Application/Perspex.Application.csproj
  40. 1
      src/Perspex.Base/Perspex.Base.csproj
  41. 2
      src/Perspex.Base/Threading/Dispatcher.cs
  42. 2
      src/Perspex.Base/Threading/DispatcherTimer.cs
  43. 13
      src/Perspex.Controls/IContentControl.cs
  44. 7
      src/Perspex.Controls/IGlobalDataTemplates.cs
  45. 6
      src/Perspex.Controls/IHeadered.cs
  46. 3
      src/Perspex.Controls/Perspex.Controls.csproj
  47. 1
      src/Perspex.Diagnostics/Perspex.Diagnostics.csproj
  48. 1
      src/Perspex.Input/Perspex.Input.csproj
  49. 1
      src/Perspex.Interactivity/Perspex.Interactivity.csproj
  50. 1
      src/Perspex.Layout/Perspex.Layout.csproj
  51. 1
      src/Perspex.SceneGraph/Perspex.SceneGraph.csproj
  52. 1
      src/Perspex.Styling/Perspex.Styling.csproj
  53. 1
      src/Perspex.Themes.Default/Perspex.Themes.Default.csproj
  54. 1
      src/Windows/Perspex.Direct2D1/Perspex.Direct2D1.csproj
  55. 1
      src/Windows/Perspex.Win32/Perspex.Win32.csproj

9
Tests/Perspex.Base.UnitTests/GlobalSuppressions.cs

@ -1,7 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
// -----------------------------------------------------------------------
// <copyright file="GlobalSuppressions.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
"StyleCop.CSharp.MaintainabilityRules",

9
Tests/Perspex.Controls.UnitTests/GlobalSuppressions.cs

@ -1,7 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
// -----------------------------------------------------------------------
// <copyright file="GlobalSuppressions.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
"StyleCop.CSharp.MaintainabilityRules",

9
Tests/Perspex.Direct2D1.UnitTests/GlobalSuppressions.cs

@ -1,7 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
// -----------------------------------------------------------------------
// <copyright file="GlobalSuppressions.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
"StyleCop.CSharp.MaintainabilityRules",

9
Tests/Perspex.Input.UnitTests/GlobalSuppressions.cs

@ -1,7 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
// -----------------------------------------------------------------------
// <copyright file="GlobalSuppressions.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
"StyleCop.CSharp.MaintainabilityRules",

9
Tests/Perspex.Interactivity.UnitTests/GlobalSuppressions.cs

@ -1,7 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
// -----------------------------------------------------------------------
// <copyright file="GlobalSuppressions.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
"StyleCop.CSharp.DocumentationRules",

9
Tests/Perspex.Layout.UnitTests/GlobalSuppressions.cs

@ -1,7 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
// -----------------------------------------------------------------------
// <copyright file="GlobalSuppressions.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
"StyleCop.CSharp.DocumentationRules",

9
Tests/Perspex.RenderTests/GlobalSuppressions.cs

@ -1,7 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
// -----------------------------------------------------------------------
// <copyright file="GlobalSuppressions.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
"StyleCop.CSharp.MaintainabilityRules",

9
Tests/Perspex.SceneGraph.UnitTests/GlobalSuppressions.cs

@ -1,7 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
// -----------------------------------------------------------------------
// <copyright file="GlobalSuppressions.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
"StyleCop.CSharp.DocumentationRules",

9
Tests/Perspex.Styling.UnitTests/GlobalSuppressions.cs

@ -1,7 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
// -----------------------------------------------------------------------
// <copyright file="GlobalSuppressions.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(
"StyleCop.CSharp.DocumentationRules",

21
src/Markup/Perspex.Markup.Xaml/Context/PerspexObjectAssembler.cs

@ -1,4 +1,10 @@
namespace Perspex.Markup.Xaml.Context
// -----------------------------------------------------------------------
// <copyright file="PerspexObjectAssembler.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Context
{
using System;
using OmniXaml;
@ -15,21 +21,24 @@
mapping.Map<XamlDataTemplate>(template => template.Content, new TemplateLoader());
var assembler = new ObjectAssembler(wiringContext, new TopDownMemberValueContext(), objectAssemblerSettings);
objectAssembler = new TemplateHostingObjectAssembler(assembler, mapping);
this.objectAssembler = new TemplateHostingObjectAssembler(assembler, mapping);
}
public object Result => objectAssembler.Result;
public object Result => this.objectAssembler.Result;
public EventHandler<XamlSetValueEventArgs> XamlSetValueHandler { get; set; }
public IWiringContext WiringContext => objectAssembler.WiringContext;
public IWiringContext WiringContext => this.objectAssembler.WiringContext;
public void Process(XamlInstruction node)
{
objectAssembler.Process(node);
this.objectAssembler.Process(node);
}
public void OverrideInstance(object instance)
{
objectAssembler.OverrideInstance(instance);
this.objectAssembler.OverrideInstance(instance);
}
}
}

25
src/Markup/Perspex.Markup.Xaml/Context/PerspexParserFactory.cs

@ -1,10 +1,15 @@
// -----------------------------------------------------------------------
// <copyright file="PerspexParserFactory.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Context
{
using OmniXaml;
using OmniXaml.ObjectAssembler;
using OmniXaml.Parsers.ProtoParser;
using OmniXaml.Parsers.XamlNodes;
using Perspex.Markup.Xaml.Context;
public class PerspexParserFactory : IXamlParserFactory
{
@ -17,22 +22,22 @@ namespace Perspex.Markup.Xaml.Context
public PerspexParserFactory(ITypeFactory typeFactory)
{
wiringContext = new PerspexWiringContext(typeFactory);
this.wiringContext = new PerspexWiringContext(typeFactory);
}
public IXamlParser CreateForReadingFree()
{
var objectAssemblerForUndefinedRoot = GetObjectAssemblerForUndefinedRoot();
var objectAssemblerForUndefinedRoot = this.GetObjectAssemblerForUndefinedRoot();
return CreateParser(objectAssemblerForUndefinedRoot);
return this.CreateParser(objectAssemblerForUndefinedRoot);
}
private IXamlParser CreateParser(IObjectAssembler objectAssemblerForUndefinedRoot)
{
var xamlInstructionParser = new OrderAwareXamlInstructionParser(new XamlInstructionParser(wiringContext));
var xamlInstructionParser = new OrderAwareXamlInstructionParser(new XamlInstructionParser(this.wiringContext));
var phaseParserKit = new PhaseParserKit(
new XamlProtoInstructionParser(wiringContext),
new XamlProtoInstructionParser(this.wiringContext),
xamlInstructionParser,
objectAssemblerForUndefinedRoot);
@ -41,19 +46,19 @@ namespace Perspex.Markup.Xaml.Context
private IObjectAssembler GetObjectAssemblerForUndefinedRoot()
{
return new ObjectAssembler(wiringContext, new TopDownMemberValueContext());
return new ObjectAssembler(this.wiringContext, new TopDownMemberValueContext());
}
public IXamlParser CreateForReadingSpecificInstance(object rootInstance)
{
var objectAssemblerForUndefinedRoot = GetObjectAssemblerForSpecificRoot(rootInstance);
var objectAssemblerForUndefinedRoot = this.GetObjectAssemblerForSpecificRoot(rootInstance);
return CreateParser(objectAssemblerForUndefinedRoot);
return this.CreateParser(objectAssemblerForUndefinedRoot);
}
private IObjectAssembler GetObjectAssemblerForSpecificRoot(object rootInstance)
{
return new PerspexObjectAssembler(wiringContext, new ObjectAssemblerSettings { RootInstance = rootInstance });
return new PerspexObjectAssembler(this.wiringContext, new ObjectAssemblerSettings { RootInstance = rootInstance });
}
}
}

8
src/Markup/Perspex.Markup.Xaml/Context/PerspexTypeRepository.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="PerspexTypeRepository.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Context
{
using System;
@ -23,7 +29,7 @@ namespace Perspex.Markup.Xaml.Context
public override XamlType GetXamlType(Type type)
{
Guard.ThrowIfNull(type, nameof(type));
return new PerspexXamlType(type, this, typeFactory, FeatureProvider, propertyBinder);
return new PerspexXamlType(type, this, this.typeFactory, this.FeatureProvider, this.propertyBinder);
}
}
}

13
src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="PerspexWiringContext.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Context
{
using System.Collections.Generic;
@ -29,7 +35,7 @@ namespace Perspex.Markup.Xaml.Context
var perspexPropertyBinder = new PerspexPropertyBinder(featureProvider.ConverterProvider);
var xamlTypeRepository = new PerspexTypeRepository(xamlNamespaceRegistry, typeFactory, featureProvider, perspexPropertyBinder);
var typeContext = new TypeContext(xamlTypeRepository, xamlNamespaceRegistry, typeFactory);
context = new WiringContext(typeContext, featureProvider);
this.context = new WiringContext(typeContext, featureProvider);
}
private static XamlNamespaceRegistry CreateXamlNamespaceRegistry()
@ -106,7 +112,8 @@ namespace Perspex.Markup.Xaml.Context
return contentPropertyProvider;
}
public ITypeContext TypeContext => context.TypeContext;
public ITypeFeatureProvider FeatureProvider => context.FeatureProvider;
public ITypeContext TypeContext => this.context.TypeContext;
public ITypeFeatureProvider FeatureProvider => this.context.FeatureProvider;
}
}

8
src/Markup/Perspex.Markup.Xaml/Context/PerspexXamlMember.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="PerspexXamlMember.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Context
{
using DataBinding;
@ -20,7 +26,7 @@ namespace Perspex.Markup.Xaml.Context
protected override IXamlMemberValuePlugin LookupXamlMemberValueConnector()
{
return new PerspexXamlMemberValuePlugin(this, propertyBinder);
return new PerspexXamlMemberValuePlugin(this, this.propertyBinder);
}
public override string ToString()

34
src/Markup/Perspex.Markup.Xaml/Context/PerspexXamlMemberValuePlugin.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="PerspexXamlMemberValuePlugin.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Context
{
using System;
@ -20,9 +26,9 @@ namespace Perspex.Markup.Xaml.Context
public override void SetValue(object instance, object value)
{
if (ValueRequiresSpecialHandling(value))
if (this.ValueRequiresSpecialHandling(value))
{
HandleSpecialValue(instance, value);
this.HandleSpecialValue(instance, value);
}
else
{
@ -35,11 +41,11 @@ namespace Perspex.Markup.Xaml.Context
var definition = value as XamlBindingDefinition;
if (definition != null)
{
HandleXamlBindingDefinition(definition);
this.HandleXamlBindingDefinition(definition);
}
else if (IsPerspexProperty)
else if (this.IsPerspexProperty)
{
HandlePerspexProperty(instance, value);
this.HandlePerspexProperty(instance, value);
}
else
{
@ -49,7 +55,7 @@ namespace Perspex.Markup.Xaml.Context
private void HandlePerspexProperty(object instance, object value)
{
var pp = PerspexProperty;
var pp = this.PerspexProperty;
var po = (PerspexObject) instance;
po.SetValue(pp, value);
}
@ -57,10 +63,10 @@ namespace Perspex.Markup.Xaml.Context
private void HandleXamlBindingDefinition(XamlBindingDefinition xamlBindingDefinition)
{
PerspexObject subjectObject = xamlBindingDefinition.Target;
propertyBinder.Create(xamlBindingDefinition);
this.propertyBinder.Create(xamlBindingDefinition);
var observableForDataContext = subjectObject.GetObservable(Control.DataContextProperty);
observableForDataContext.Where(o => o != null).Subscribe(_ => BindToDataContextWhenItsSet(xamlBindingDefinition));
observableForDataContext.Where(o => o != null).Subscribe(_ => this.BindToDataContextWhenItsSet(xamlBindingDefinition));
}
private void BindToDataContextWhenItsSet(XamlBindingDefinition definition)
@ -68,7 +74,7 @@ namespace Perspex.Markup.Xaml.Context
var target = definition.Target;
var dataContext = target.DataContext;
var binding = propertyBinder.GetBinding(target, definition.TargetProperty);
var binding = this.propertyBinder.GetBinding(target, definition.TargetProperty);
binding.Bind(dataContext);
}
@ -77,8 +83,8 @@ namespace Perspex.Markup.Xaml.Context
{
get
{
var underlyingType = xamlMember.DeclaringType.UnderlyingType;
var name = xamlMember.Name + "Property";
var underlyingType = this.xamlMember.DeclaringType.UnderlyingType;
var name = this.xamlMember.Name + "Property";
var value = ReflectionExtensions.GetValueOfStaticField(underlyingType, name);
return value as PerspexProperty;
@ -87,14 +93,14 @@ namespace Perspex.Markup.Xaml.Context
private bool ValueRequiresSpecialHandling(object value)
{
return value is XamlBindingDefinition || IsPerspexProperty;
return value is XamlBindingDefinition || this.IsPerspexProperty;
}
private bool IsPerspexProperty => PerspexProperty != null;
private bool IsPerspexProperty => this.PerspexProperty != null;
public override string ToString()
{
return $"{{Perspex Value Connector for member {xamlMember}}}";
return $"{{Perspex Value Connector for member {this.xamlMember}}}";
}
}
}

10
src/Markup/Perspex.Markup.Xaml/Context/PerspexXamlType.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="PerspexXamlType.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Context
{
using System;
@ -18,11 +24,11 @@ namespace Perspex.Markup.Xaml.Context
this.propertyBinder = propertyBinder;
}
protected IPerspexPropertyBinder PropertyBinder => propertyBinder;
protected IPerspexPropertyBinder PropertyBinder => this.propertyBinder;
protected override XamlMember LookupMember(string name)
{
return new PerspexXamlMember(name, this, TypeRepository, FeatureProvider, propertyBinder);
return new PerspexXamlMember(name, this, this.TypeRepository, this.FeatureProvider, this.propertyBinder);
}
public override string ToString()

6
src/Markup/Perspex.Markup.Xaml/Converters/BitmapConverter.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="BitmapConverter.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Converters
{
using System;

6
src/Markup/Perspex.Markup.Xaml/Converters/BrushConverter.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="BrushConverter.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Converters
{
using System;

8
src/Markup/Perspex.Markup.Xaml/Converters/GridLengthTypeConverter.cs

@ -1,4 +1,10 @@
namespace Perspex.Markup.Xaml.Converters
// -----------------------------------------------------------------------
// <copyright file="GridLengthTypeConverter.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Converters
{
using System;
using System.Globalization;

8
src/Markup/Perspex.Markup.Xaml/Converters/ThicknessConverter.cs

@ -1,4 +1,10 @@
namespace Perspex.Markup.Xaml.Converters
// -----------------------------------------------------------------------
// <copyright file="ThicknessConverter.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Converters
{
using System;
using System.Collections.Generic;

32
src/Markup/Perspex.Markup.Xaml/DataBinding/ChangeTracking/ObservablePropertyBranch.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="ObservablePropertyBranch.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.DataBinding.ChangeTracking
{
using System;
@ -21,9 +27,9 @@ namespace Perspex.Markup.Xaml.DataBinding.ChangeTracking
this.root = root;
this.propertyPath = propertyPath;
mountPoint = new PropertyMountPoint(root, propertyPath);
var subscriptions = GetInpcNodes();
Changed = CreateObservableFromNodes(subscriptions);
this.mountPoint = new PropertyMountPoint(root, propertyPath);
var subscriptions = this.GetInpcNodes();
this.Changed = this.CreateObservableFromNodes(subscriptions);
}
private IObservable<object> CreateObservableFromNodes(IEnumerable<InpcNode> subscriptions)
@ -32,14 +38,14 @@ namespace Perspex.Markup.Xaml.DataBinding.ChangeTracking
subscription => Observable.FromEventPattern<PropertyChangedEventHandler, PropertyChangedEventArgs>(
ev => subscription.Parent.PropertyChanged += ev,
handler => subscription.Parent.PropertyChanged -= handler)
.Do(_ => mountPoint = new PropertyMountPoint(root, propertyPath))
.Where(pattern => pattern.EventArgs.PropertyName == subscription.PropertyName))
.Do(_ => this.mountPoint = new PropertyMountPoint(this.root, this.propertyPath))
.Where(pattern => pattern.EventArgs.PropertyName == subscription.PropertyName))
.Merge();
}
private IEnumerable<InpcNode> GetInpcNodes()
{
return GetSubscriptionsRecursive(root, propertyPath, 0);
return this.GetSubscriptionsRecursive(this.root, this.propertyPath, 0);
}
private IEnumerable<InpcNode> GetSubscriptionsRecursive(object current, PropertyPath propertyPath, int i)
@ -60,7 +66,7 @@ namespace Perspex.Markup.Xaml.DataBinding.ChangeTracking
var currentObjectTypeInfo = current.GetType().GetTypeInfo();
var nextProperty = currentObjectTypeInfo.GetDeclaredProperty(nextPropertyName);
var nextInstance = nextProperty.GetValue(current);
subscriptions.AddRange(GetSubscriptionsRecursive(nextInstance, propertyPath, i + 1));
subscriptions.AddRange(this.GetSubscriptionsRecursive(nextInstance, propertyPath, i + 1));
}
return subscriptions;
@ -72,25 +78,27 @@ namespace Perspex.Markup.Xaml.DataBinding.ChangeTracking
{
get
{
return mountPoint.Value;
return this.mountPoint.Value;
}
set
{
mountPoint.Value = value;
this.mountPoint.Value = value;
}
}
public Type Type => mountPoint.ProperyType;
public Type Type => this.mountPoint.ProperyType;
private class InpcNode
{
public InpcNode(INotifyPropertyChanged parent, string propertyName)
{
Parent = parent;
PropertyName = propertyName;
this.Parent = parent;
this.PropertyName = propertyName;
}
public INotifyPropertyChanged Parent { get; }
public string PropertyName { get; }
}
}

17
src/Markup/Perspex.Markup.Xaml/DataBinding/ChangeTracking/PropertyMountPoint.cs

@ -1,4 +1,10 @@
namespace Perspex.Markup.Xaml.DataBinding.ChangeTracking
// -----------------------------------------------------------------------
// <copyright file="PropertyMountPoint.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.DataBinding.ChangeTracking
{
using System;
using System.Reflection;
@ -9,7 +15,7 @@
private readonly TargettedProperty referencedTargettedProperty;
public PropertyMountPoint(object origin, PropertyPath propertyPath)
{
{
Guard.ThrowIfNull(origin, nameof(origin));
Guard.ThrowIfNull(propertyPath, nameof(propertyPath));
@ -35,14 +41,15 @@
{
get
{
return referencedTargettedProperty.Value;
return this.referencedTargettedProperty.Value;
}
set
{
referencedTargettedProperty.Value = value;
this.referencedTargettedProperty.Value = value;
}
}
public Type ProperyType => referencedTargettedProperty.PropertyType;
public Type ProperyType => this.referencedTargettedProperty.PropertyType;
}
}

14
src/Markup/Perspex.Markup.Xaml/DataBinding/ChangeTracking/PropertyPath.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="PropertyPath.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.DataBinding.ChangeTracking
{
public class PropertyPath
@ -10,14 +16,14 @@ namespace Perspex.Markup.Xaml.DataBinding.ChangeTracking
}
public PropertyPath(string path)
{
chunks = path.Split('.');
{
this.chunks = path.Split('.');
}
public string[] Chunks
{
get { return chunks; }
set { chunks = value; }
get { return this.chunks; }
set { this.chunks = value; }
}
public PropertyPath Clone()

22
src/Markup/Perspex.Markup.Xaml/DataBinding/ChangeTracking/TargettedProperty.cs

@ -1,11 +1,16 @@
// -----------------------------------------------------------------------
// <copyright file="TargettedProperty.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.DataBinding.ChangeTracking
{
using System;
using System.Reflection;
using Controls;
using Glass;
class TargettedProperty
internal class TargettedProperty
{
private readonly object instance;
private readonly PropertyInfo propertyInfo;
@ -21,14 +26,19 @@ namespace Perspex.Markup.Xaml.DataBinding.ChangeTracking
public object Value
{
get { return propertyInfo.GetValue(instance); }
get
{
return this.propertyInfo.GetValue(this.instance);
}
set
{
propertyInfo.SetValue(instance, value);
this.propertyInfo.SetValue(this.instance, value);
}
}
public Type PropertyType => propertyInfo.PropertyType;
public string Name => propertyInfo.Name;
public Type PropertyType => this.propertyInfo.PropertyType;
public string Name => this.propertyInfo.Name;
}
}

44
src/Markup/Perspex.Markup.Xaml/DataBinding/DataContextChangeSynchronizer.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="DataContextChangeSynchronizer.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.DataBinding
{
using System;
@ -23,17 +29,17 @@ namespace Perspex.Markup.Xaml.DataBinding
Guard.ThrowIfNull(source, nameof(source));
Guard.ThrowIfNull(typeConverterProvider, nameof(typeConverterProvider));
bindingEndpoint = new TargetBindingEndpoint(target, targetProperty);
sourceEndpoint = new ObservablePropertyBranch(source, sourcePropertyPath);
targetPropertyTypeConverter = typeConverterProvider.GetTypeConverter(targetProperty.PropertyType);
this.bindingEndpoint = new TargetBindingEndpoint(target, targetProperty);
this.sourceEndpoint = new ObservablePropertyBranch(source, sourcePropertyPath);
this.targetPropertyTypeConverter = typeConverterProvider.GetTypeConverter(targetProperty.PropertyType);
}
private bool CanAssignWithoutConversion
{
get
{
var sourceTypeInfo = sourceEndpoint.Type.GetTypeInfo();
var targetTypeInfo = bindingEndpoint.Property.PropertyType.GetTypeInfo();
var sourceTypeInfo = this.sourceEndpoint.Type.GetTypeInfo();
var targetTypeInfo = this.bindingEndpoint.Property.PropertyType.GetTypeInfo();
var compatible = targetTypeInfo.IsAssignableFrom(sourceTypeInfo);
return compatible;
}
@ -41,19 +47,19 @@ namespace Perspex.Markup.Xaml.DataBinding
public void SubscribeModelToUI()
{
bindingEndpoint.Object.GetObservable(bindingEndpoint.Property).Subscribe(UpdateModelFromUI);
}
this.bindingEndpoint.Object.GetObservable(this.bindingEndpoint.Property).Subscribe(this.UpdateModelFromUI);
}
public void SubscribeUIToModel()
{
sourceEndpoint.Changed.Subscribe(_ => UpdateUIFromModel());
UpdateUIFromModel();
this.sourceEndpoint.Changed.Subscribe(_ => this.UpdateUIFromModel());
this.UpdateUIFromModel();
}
private void UpdateUIFromModel()
{
object contextGetter = sourceEndpoint.Value;
SetCompatibleValue(contextGetter, bindingEndpoint.Property.PropertyType, o => bindingEndpoint.Object.SetValue(bindingEndpoint.Property, o));
object contextGetter = this.sourceEndpoint.Value;
this.SetCompatibleValue(contextGetter, this.bindingEndpoint.Property.PropertyType, o => this.bindingEndpoint.Object.SetValue(this.bindingEndpoint.Property, o));
}
private void SetCompatibleValue(object originalValue, Type targetType, Action<object> setValueFunc)
@ -64,7 +70,7 @@ namespace Perspex.Markup.Xaml.DataBinding
}
else
{
if (CanAssignWithoutConversion)
if (this.CanAssignWithoutConversion)
{
setValueFunc(originalValue);
}
@ -72,11 +78,11 @@ namespace Perspex.Markup.Xaml.DataBinding
{
var synchronizationOk = false;
if (targetPropertyTypeConverter != null)
if (this.targetPropertyTypeConverter != null)
{
if (targetPropertyTypeConverter.CanConvertTo(null, targetType))
if (this.targetPropertyTypeConverter.CanConvertTo(null, targetType))
{
object convertedValue = targetPropertyTypeConverter.ConvertTo(null, CultureInfo.InvariantCulture, originalValue,
object convertedValue = this.targetPropertyTypeConverter.ConvertTo(null, CultureInfo.InvariantCulture, originalValue,
targetType);
if (convertedValue != null)
@ -89,7 +95,7 @@ namespace Perspex.Markup.Xaml.DataBinding
if (!synchronizationOk)
{
LogCannotConvertError(originalValue);
this.LogCannotConvertError(originalValue);
}
}
}
@ -97,7 +103,7 @@ namespace Perspex.Markup.Xaml.DataBinding
private void UpdateModelFromUI(object valueFromUI)
{
SetCompatibleValue(valueFromUI, sourceEndpoint.Type, o => sourceEndpoint.Value = o);
this.SetCompatibleValue(valueFromUI, this.sourceEndpoint.Type, o => this.sourceEndpoint.Value = o);
}
private void LogCannotConvertError(object value)
@ -107,7 +113,7 @@ namespace Perspex.Markup.Xaml.DataBinding
var loggableValue = value.ToString();
var valueToWrite = string.IsNullOrWhiteSpace(loggableValue) ? "'(empty/whitespace string)'" : loggableValue;
Debug.WriteLine("Cannot convert value {0} ({1}) to {2}", valueToWrite, value.GetType(), bindingEndpoint.Property.PropertyType);
}
Debug.WriteLine("Cannot convert value {0} ({1}) to {2}", valueToWrite, value.GetType(), this.bindingEndpoint.Property.PropertyType);
}
}
}

10
src/Markup/Perspex.Markup.Xaml/DataBinding/IPerspexPropertyBinder.cs

@ -1,11 +1,19 @@
namespace Perspex.Markup.Xaml.DataBinding
// -----------------------------------------------------------------------
// <copyright file="IPerspexPropertyBinder.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.DataBinding
{
using System.Collections.Generic;
public interface IPerspexPropertyBinder
{
XamlBinding GetBinding(PerspexObject po, PerspexProperty pp);
IEnumerable<XamlBinding> GetBindings(PerspexObject source);
XamlBinding Create(XamlBindingDefinition xamlBinding);
}
}

18
src/Markup/Perspex.Markup.Xaml/DataBinding/PerspexPropertyBinder.cs

@ -1,4 +1,10 @@
namespace Perspex.Markup.Xaml.DataBinding
// -----------------------------------------------------------------------
// <copyright file="PerspexPropertyBinder.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.DataBinding
{
using System;
using System.Collections.Generic;
@ -14,17 +20,17 @@
public PerspexPropertyBinder(ITypeConverterProvider typeConverterProvider)
{
this.typeConverterProvider = typeConverterProvider;
bindings = new HashSet<XamlBinding>();
this.bindings = new HashSet<XamlBinding>();
}
public XamlBinding GetBinding(PerspexObject po, PerspexProperty pp)
{
return bindings.First(xamlBinding => xamlBinding.Target == po && xamlBinding.TargetProperty == pp);
return this.bindings.First(xamlBinding => xamlBinding.Target == po && xamlBinding.TargetProperty == pp);
}
public IEnumerable<XamlBinding> GetBindings(PerspexObject source)
{
return from binding in bindings
return from binding in this.bindings
where binding.Target == source
select binding;
}
@ -41,7 +47,7 @@
throw new InvalidOperationException();
}
var binding = new XamlBinding(typeConverterProvider)
var binding = new XamlBinding(this.typeConverterProvider)
{
BindingMode = xamlBinding.BindingMode,
SourcePropertyPath = xamlBinding.SourcePropertyPath,
@ -49,7 +55,7 @@
TargetProperty = xamlBinding.TargetProperty
};
bindings.Add(binding);
this.bindings.Add(binding);
return binding;
}
}

11
src/Markup/Perspex.Markup.Xaml/DataBinding/SourceBindingEndpoint.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="SourceBindingEndpoint.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.DataBinding
{
using System;
@ -6,8 +12,11 @@ namespace Perspex.Markup.Xaml.DataBinding
public class SourceBindingEndpoint
{
public Type PropertyType { get; }
public INotifyPropertyChanged Source { get; }
public dynamic PropertyGetter { get; }
public Delegate PropertySetter { get; }
public SourceBindingEndpoint(INotifyPropertyChanged source, Type propertyType, dynamic propertyGetter, Delegate propertySetter)
@ -15,7 +24,7 @@ namespace Perspex.Markup.Xaml.DataBinding
this.Source = source;
this.PropertyType = propertyType;
this.PropertyGetter = propertyGetter;
this.PropertySetter = propertySetter;
this.PropertySetter = propertySetter;
}
}
}

11
src/Markup/Perspex.Markup.Xaml/DataBinding/TargetBindingEndpoint.cs

@ -1,14 +1,21 @@
// -----------------------------------------------------------------------
// <copyright file="TargetBindingEndpoint.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.DataBinding
{
public class TargetBindingEndpoint
{
public PerspexObject Object { get; }
public PerspexProperty Property { get; }
public TargetBindingEndpoint(PerspexObject obj, PerspexProperty property)
{
Object = obj;
Property = property;
this.Object = obj;
this.Property = property;
}
}
}

37
src/Markup/Perspex.Markup.Xaml/DataBinding/XamlBinding.cs

@ -1,4 +1,10 @@
namespace Perspex.Markup.Xaml.DataBinding
// -----------------------------------------------------------------------
// <copyright file="XamlBinding.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.DataBinding
{
using System;
using System.Diagnostics;
@ -10,8 +16,11 @@
private readonly ITypeConverterProvider typeConverterProvider;
public PerspexObject Target { get; set; }
public PerspexProperty TargetProperty { get; set; }
public PropertyPath SourcePropertyPath { get; set; }
public BindingMode BindingMode { get; set; }
public XamlBinding(ITypeConverterProvider typeConverterProvider)
@ -28,34 +37,34 @@
try
{
if (BindingMode == BindingMode.TwoWay)
if (this.BindingMode == BindingMode.TwoWay)
{
var changeSynchronizer = new DataContextChangeSynchronizer(
Target,
TargetProperty,
SourcePropertyPath,
this.Target,
this.TargetProperty,
this.SourcePropertyPath,
dataContext,
typeConverterProvider);
this.typeConverterProvider);
changeSynchronizer.SubscribeUIToModel();
changeSynchronizer.SubscribeModelToUI();
}
if (BindingMode == BindingMode.OneWay)
if (this.BindingMode == BindingMode.OneWay)
{
var subscriptionHandler = new DataContextChangeSynchronizer(
Target,
TargetProperty,
SourcePropertyPath,
this.Target,
this.TargetProperty,
this.SourcePropertyPath,
dataContext,
typeConverterProvider);
this.typeConverterProvider);
subscriptionHandler.SubscribeUIToModel();
subscriptionHandler.SubscribeUIToModel();
}
if (BindingMode == BindingMode.OneWayToSource)
if (this.BindingMode == BindingMode.OneWayToSource)
{
var subscriptionHandler = new DataContextChangeSynchronizer(Target, TargetProperty, SourcePropertyPath, dataContext, typeConverterProvider);
var subscriptionHandler = new DataContextChangeSynchronizer(this.Target, this.TargetProperty, this.SourcePropertyPath, dataContext, this.typeConverterProvider);
subscriptionHandler.SubscribeModelToUI();
}
}

16
src/Markup/Perspex.Markup.Xaml/DataBinding/XamlBindingDefinition.cs

@ -1,4 +1,10 @@
namespace Perspex.Markup.Xaml.DataBinding
// -----------------------------------------------------------------------
// <copyright file="XamlBindingDefinition.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.DataBinding
{
using ChangeTracking;
using Controls;
@ -18,12 +24,12 @@
this.bindingMode = bindingMode;
}
public Control Target => target;
public Control Target => this.target;
public PerspexProperty TargetProperty => targetProperty;
public PerspexProperty TargetProperty => this.targetProperty;
public PropertyPath SourcePropertyPath => sourcePropertyPath;
public PropertyPath SourcePropertyPath => this.sourcePropertyPath;
public BindingMode BindingMode => bindingMode;
public BindingMode BindingMode => this.bindingMode;
}
}

18
src/Markup/Perspex.Markup.Xaml/MarkupExtensions/BindingExtension.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="BindingExtension.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.MarkupExtensions
{
using System.Linq;
@ -9,12 +15,12 @@ namespace Perspex.Markup.Xaml.MarkupExtensions
public class BindingExtension : MarkupExtension
{
public BindingExtension()
{
{
}
public BindingExtension(string path)
{
Path = path;
this.Path = path;
}
public override object ProvideValue(MarkupExtensionContext extensionContext)
@ -28,14 +34,14 @@ namespace Perspex.Markup.Xaml.MarkupExtensions
(
target,
perspexProperty,
new PropertyPath(Path),
Mode == BindingMode.Default ? BindingMode.OneWay : Mode
new PropertyPath(this.Path),
this.Mode == BindingMode.Default ? BindingMode.OneWay : this.Mode
);
}
/// <summary> The source path (for CLR bindings).</summary>
/// <summary> The source path (for CLR bindings).</summary>
public string Path { get; set; }
public BindingMode Mode { get; set; }
public BindingMode Mode { get; set; }
}
}

18
src/Markup/Perspex.Markup.Xaml/MarkupExtensions/TypeExtension.cs

@ -1,4 +1,10 @@
namespace Perspex.Markup.Xaml.MarkupExtensions
// -----------------------------------------------------------------------
// <copyright file="TypeExtension.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.MarkupExtensions
{
using System;
using Glass;
@ -12,12 +18,12 @@
public Type Type { get; set; }
public TypeExtension()
{
{
}
public TypeExtension(Type type)
{
Type = type;
this.Type = type;
}
public string TypeName { get; set; }
@ -34,12 +40,12 @@
public override object ProvideValue(MarkupExtensionContext markupExtensionContext)
{
if (Type != null)
if (this.Type != null)
{
return Type;
return this.Type;
}
return ResolveFromString(TypeName, markupExtensionContext.TypeRepository);
return this.ResolveFromString(this.TypeName, markupExtensionContext.TypeRepository);
}
}
}

6
src/Markup/Perspex.Markup.Xaml/Templates/Template.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="Template.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Templates
{
public class Template

10
src/Markup/Perspex.Markup.Xaml/Templates/TemplateContent.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="TemplateContent.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Templates
{
using System.Collections.Generic;
@ -18,9 +24,9 @@ namespace Perspex.Markup.Xaml.Templates
public Control Load()
{
var assembler = new PerspexObjectAssembler(context);
var assembler = new PerspexObjectAssembler(this.context);
foreach (var xamlNode in nodes)
foreach (var xamlNode in this.nodes)
{
assembler.Process(xamlNode);
}

6
src/Markup/Perspex.Markup.Xaml/Templates/TemplateLoader.cs

@ -1,3 +1,9 @@
// -----------------------------------------------------------------------
// <copyright file="TemplateLoader.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Templates
{
using System.Collections.Generic;

19
src/Markup/Perspex.Markup.Xaml/Templates/XamlDataTemplate.cs

@ -1,26 +1,32 @@
// -----------------------------------------------------------------------
// <copyright file="XamlDataTemplate.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Markup.Xaml.Templates
{
using System;
using Controls.Templates;
using OmniXaml.Attributes;
using Controls;
using Perspex.Controls;
[ContentProperty("Content")]
public class XamlDataTemplate : IDataTemplate
{
private bool MyMatch(object data)
{
if (DataType == null)
if (this.DataType == null)
{
throw new InvalidOperationException("XAML DataTemplates must have a DataType");
}
return DataType == data.GetType();
return this.DataType == data.GetType();
}
private Control CreateVisualTreeForItem(object data)
{
var visualTreeForItem = Content.Load();
var visualTreeForItem = this.Content.Load();
visualTreeForItem.DataContext = data;
return visualTreeForItem;
}
@ -28,14 +34,15 @@ namespace Perspex.Markup.Xaml.Templates
public Type DataType { get; set; }
public TemplateContent Content { get; set; }
public IControl Build(object param)
{
return CreateVisualTreeForItem(param);
return this.CreateVisualTreeForItem(param);
}
public bool Match(object data)
{
return MyMatch(data);
return this.MyMatch(data);
}
}
}

1
src/Perspex.Animation/Perspex.Animation.csproj

@ -33,6 +33,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\Perspex.Animation.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<!-- A reference to the entire .NET Framework is automatically included -->

1
src/Perspex.Application/Perspex.Application.csproj

@ -35,6 +35,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\Perspex.Application.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<!-- A reference to the entire .NET Framework is automatically included -->

1
src/Perspex.Base/Perspex.Base.csproj

@ -35,6 +35,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\Perspex.Base.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\Shared\SharedAssemblyInfo.cs">

2
src/Perspex.Base/Threading/Dispatcher.cs

@ -1,4 +1,4 @@
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
// <copyright file="Dispatcher.cs" company="Steven Kirk">
// Copyright 2014 MIT Licence. See licence.md for more information.
// </copyright>

2
src/Perspex.Base/Threading/DispatcherTimer.cs

@ -1,4 +1,4 @@
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
// <copyright file="DispatcherTimer.cs" company="Steven Kirk">
// Copyright 2013 MIT Licence. See licence.md for more information.
// </copyright>

13
src/Perspex.Controls/IContentControl.cs

@ -7,12 +7,25 @@ namespace Perspex.Controls
{
using Perspex.Layout;
/// <summary>
/// Defines a control that displays <see cref="Content"/> according to a
/// <see cref="Perspex.Controls.Templates.DataTemplate"/>.
/// </summary>
public interface IContentControl : IControl
{
/// <summary>
/// Gets or sets the content to display.
/// </summary>
object Content { get; set; }
/// <summary>
/// Gets or sets the horizontal alignment of the content within the control.
/// </summary>
HorizontalAlignment HorizontalContentAlignment { get; set; }
/// <summary>
/// Gets or sets the vertical alignment of the content within the control.
/// </summary>
VerticalAlignment VerticalContentAlignment { get; set; }
}
}

7
src/Perspex.Controls/IGlobalDataTemplates.cs

@ -6,11 +6,16 @@
namespace Perspex.Controls
{
using System.Collections.Generic;
using Perspex.Controls.Templates;
/// <summary>
/// Defines the application-global data templates.
/// </summary>
public interface IGlobalDataTemplates
{
/// <summary>
/// Gets the application-global data templates.
/// </summary>
DataTemplates DataTemplates { get; }
}
}

6
src/Perspex.Controls/IHeadered.cs

@ -6,8 +6,14 @@
namespace Perspex.Controls
{
/// <summary>
/// Defines a headered object.
/// </summary>
public interface IHeadered
{
/// <summary>
/// Gets or set the header.
/// </summary>
object Header { get; set; }
}
}

3
src/Perspex.Controls/Perspex.Controls.csproj

@ -35,6 +35,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\Perspex.Controls.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\Shared\SharedAssemblyInfo.cs">
@ -45,6 +46,7 @@
<Compile Include="IControl.cs" />
<Compile Include="IReparentingHost.cs" />
<Compile Include="ISetLogicalParent.cs" />
<Compile Include="ItemsPanelTemplate.cs" />
<Compile Include="MenuItemAccessKeyHandler.cs" />
<Compile Include="Mixins\SelectableMixin.cs" />
<Compile Include="Parsers\GridLengthsParser.cs" />
@ -110,7 +112,6 @@
<Compile Include="Image.cs" />
<Compile Include="Generators\IItemContainerGenerator.cs" />
<Compile Include="ItemsControl.cs" />
<Compile Include="ItemsPanelTemplate.cs" />
<Compile Include="Presenters\ItemsPresenter.cs" />
<Compile Include="Panel.cs" />
<Compile Include="Primitives\ScrollBarVisibility.cs" />

1
src/Perspex.Diagnostics/Perspex.Diagnostics.csproj

@ -35,6 +35,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\Perspex.Diagnostics.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<!-- A reference to the entire .NET Framework is automatically included -->

1
src/Perspex.Input/Perspex.Input.csproj

@ -35,6 +35,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\Perspex.Input.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<!-- A reference to the entire .NET Framework is automatically included -->

1
src/Perspex.Interactivity/Perspex.Interactivity.csproj

@ -35,6 +35,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\Perspex.Interactivity.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<!-- A reference to the entire .NET Framework is automatically included -->

1
src/Perspex.Layout/Perspex.Layout.csproj

@ -35,6 +35,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\Perspex.Layout.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<!-- A reference to the entire .NET Framework is automatically included -->

1
src/Perspex.SceneGraph/Perspex.SceneGraph.csproj

@ -35,6 +35,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\Perspex.SceneGraph.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<!-- A reference to the entire .NET Framework is automatically included -->

1
src/Perspex.Styling/Perspex.Styling.csproj

@ -35,6 +35,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\Perspex.Styling.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\Shared\SharedAssemblyInfo.cs">

1
src/Perspex.Themes.Default/Perspex.Themes.Default.csproj

@ -35,6 +35,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\Perspex.Themes.Default.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<!-- A reference to the entire .NET Framework is automatically included -->

1
src/Windows/Perspex.Direct2D1/Perspex.Direct2D1.csproj

@ -31,6 +31,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\Perspex.Direct2D1.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="SharpDX, Version=2.6.3.0, Culture=neutral, PublicKeyToken=b4dcf0f35e5521f1, processorArchitecture=MSIL">

1
src/Windows/Perspex.Win32/Perspex.Win32.csproj

@ -31,6 +31,7 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\Perspex.Win32.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL">

Loading…
Cancel
Save