diff --git a/samples/XamlTestApplication/Views/MainWindow.paml b/samples/XamlTestApplication/Views/MainWindow.paml index 0f37faa54c..0794d15aff 100644 --- a/samples/XamlTestApplication/Views/MainWindow.paml +++ b/samples/XamlTestApplication/Views/MainWindow.paml @@ -2,7 +2,6 @@ xmlns="https://github.com/perspex" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Perspex Test Application" Height="350" Width="525" SizeToContent="WidthAndHeight" > - @@ -49,7 +48,7 @@ - + @@ -63,7 +62,7 @@ - + diff --git a/src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs b/src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs index e8808ff285..12ef408fcd 100644 --- a/src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs +++ b/src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs @@ -22,23 +22,37 @@ using Perspex.Media.Imaging; using Perspex.Metadata; using Perspex.Platform; using Perspex.Styling; +using Perspex.Controls.Primitives; namespace Perspex.Markup.Xaml.Context { - public class PerspexWiringContext : IWiringContext + public class PerspexWiringContext : WiringContext { - private readonly WiringContext _context; private const string PerspexNs = "https://github.com/perspex"; public PerspexWiringContext(ITypeFactory typeFactory) + : this(typeFactory, new TypeFeatureProvider(GetContentPropertyProvider(), GetConverterProvider())) { - var featureProvider = new TypeFeatureProvider(GetContentPropertyProvider(), GetConverterProvider()); + } + public PerspexWiringContext(ITypeFactory typeFactory, TypeFeatureProvider featureProvider) + : base(CreateTypeContext(typeFactory, featureProvider), featureProvider) + { + } + + private static ITypeContext CreateTypeContext(ITypeFactory typeFactory, TypeFeatureProvider featureProvider) + { var xamlNamespaceRegistry = CreateXamlNamespaceRegistry(); 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); + var typeRepository = new PerspexTypeRepository(xamlNamespaceRegistry, typeFactory, featureProvider, perspexPropertyBinder); + + typeRepository.RegisterMetadata(new Metadata().WithMemberDependency(x => x.Value, x => x.Property)); + typeRepository.RegisterMetadata( + new Metadata() + .WithMemberDependency(x => x.SelectedIndex, x => x.Items) + .WithMemberDependency(x => x.SelectedItem, x => x.Items)); + + return new TypeContext(typeRepository, xamlNamespaceRegistry, typeFactory); } private static XamlNamespaceRegistry CreateXamlNamespaceRegistry() @@ -116,9 +130,5 @@ namespace Perspex.Markup.Xaml.Context return contentPropertyProvider; } - - public ITypeContext TypeContext => _context.TypeContext; - - public ITypeFeatureProvider FeatureProvider => _context.FeatureProvider; } } \ No newline at end of file diff --git a/src/Markup/Perspex.Markup.Xaml/OmniXAML b/src/Markup/Perspex.Markup.Xaml/OmniXAML index 1aa1e5080b..49e6ec001f 160000 --- a/src/Markup/Perspex.Markup.Xaml/OmniXAML +++ b/src/Markup/Perspex.Markup.Xaml/OmniXAML @@ -1 +1 @@ -Subproject commit 1aa1e5080b04ccf40baef4420ee29ffef9303811 +Subproject commit 49e6ec001f5873cf2290e0bc1f6f06ca9b9cf808 diff --git a/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj b/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj index 3ed9a50f31..f6b9dcf204 100644 --- a/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj +++ b/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj @@ -59,6 +59,7 @@ + diff --git a/src/Perspex.Controls/DropDown.cs b/src/Perspex.Controls/DropDown.cs index a465ce68a9..eb78e13cbc 100644 --- a/src/Perspex.Controls/DropDown.cs +++ b/src/Perspex.Controls/DropDown.cs @@ -140,6 +140,8 @@ namespace Perspex.Controls if (control != null) { + control.Measure(Size.Infinity); + SelectionBoxItem = new Rectangle { Width = control.DesiredSize.Width, diff --git a/src/Perspex.Controls/ItemsControl.cs b/src/Perspex.Controls/ItemsControl.cs index 2939347e67..c1e303147c 100644 --- a/src/Perspex.Controls/ItemsControl.cs +++ b/src/Perspex.Controls/ItemsControl.cs @@ -155,6 +155,8 @@ namespace Perspex.Controls /// The event args. protected virtual void ItemsChanged(PerspexPropertyChangedEventArgs e) { + System.Diagnostics.Debug.WriteLine($"{this.GetType().Name} set items"); + var incc = e.OldValue as INotifyCollectionChanged; if (incc != null) diff --git a/src/Perspex.Controls/Primitives/SelectingItemsControl.cs b/src/Perspex.Controls/Primitives/SelectingItemsControl.cs index 371a3a96a9..811cc7bb3e 100644 --- a/src/Perspex.Controls/Primitives/SelectingItemsControl.cs +++ b/src/Perspex.Controls/Primitives/SelectingItemsControl.cs @@ -299,6 +299,8 @@ namespace Perspex.Controls.Primitives /// The event args. private void SelectedIndexChanged(PerspexPropertyChangedEventArgs e) { + System.Diagnostics.Debug.WriteLine($"{this.GetType().Name} set selected index"); + var index = (int)e.OldValue; if (index != -1) diff --git a/src/Perspex.Controls/TextBlock.cs b/src/Perspex.Controls/TextBlock.cs index 463173cbc9..c9959ebeb3 100644 --- a/src/Perspex.Controls/TextBlock.cs +++ b/src/Perspex.Controls/TextBlock.cs @@ -235,9 +235,9 @@ namespace Perspex.Controls protected virtual FormattedText CreateFormattedText(Size constraint) { var result = new FormattedText( - Text, - FontFamily, - FontSize, + Text ?? string.Empty, + FontFamily ?? "Ariel", + FontSize > 0 ? FontSize : 12, FontStyle, TextAlignment, FontWeight); diff --git a/src/Perspex.SceneGraph/Media/FormattedText.cs b/src/Perspex.SceneGraph/Media/FormattedText.cs index f5f390c609..245db90eb6 100644 --- a/src/Perspex.SceneGraph/Media/FormattedText.cs +++ b/src/Perspex.SceneGraph/Media/FormattedText.cs @@ -29,9 +29,10 @@ namespace Perspex.Media TextAlignment textAlignment, FontWeight fontWeight) { - //TODO: Find out why it was null in the first place. Demo project - AvalonStudio - //https://github.com/VitalElement/AvalonStudio/commit/787fb9396feb74e6ca6bd4e08436269a349df9c6 - text = text ?? ""; + Contract.Requires(text != null); + Contract.Requires(fontFamilyName != null); + Contract.Requires(fontSize > 0); + Text = text; FontFamilyName = fontFamilyName; FontSize = fontSize;