Browse Source

Fixed #2228

pull/2231/head
Nikita Tsukanov 7 years ago
parent
commit
effc7c09c6
  1. 6
      src/Markup/Avalonia.Markup.Xaml/AvaloniaTypeConverters.cs
  2. 7
      src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaTypeAttributeProvider.cs
  3. 23
      tests/Avalonia.Markup.Xaml.UnitTests/Converters/ConverterTests.cs

6
src/Markup/Avalonia.Markup.Xaml/AvaloniaTypeConverters.cs

@ -44,6 +44,12 @@ namespace Avalonia.Markup.Xaml
{ typeof(FontFamily), typeof(FontFamilyTypeConverter) }
};
internal static Type GetBuiltinTypeConverter(Type type)
{
_converters.TryGetValue(type, out var result);
return result;
}
/// <summary>
/// Tries to lookup a <see cref="TypeConverter"/> for a type.
/// </summary>

7
src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaTypeAttributeProvider.cs

@ -42,7 +42,10 @@ namespace Avalonia.Markup.Xaml.PortableXaml
}
else if (attributeType == typeof(TypeConverterAttribute))
{
result = ti.GetCustomAttribute(attributeType, inherit);
var builtin = AvaloniaTypeConverters.GetBuiltinTypeConverter(_type);
if (builtin != null)
result = new TypeConverterAttribute(builtin);
result = result ?? ti.GetCustomAttribute(attributeType, inherit);
if (result == null)
{
@ -111,4 +114,4 @@ namespace Avalonia.Markup.Xaml.PortableXaml
return null;
}
}
}
}

23
tests/Avalonia.Markup.Xaml.UnitTests/Converters/ConverterTests.cs

@ -0,0 +1,23 @@
using System;
using Xunit;
namespace Avalonia.Markup.Xaml.UnitTests.Converters
{
public class ConverterTests
{
[Fact]
public void Bug_2228_Relative_Uris_Should_Be_Correctly_Parsed()
{
var testClass = typeof(TestClassWithUri);
var parsed = AvaloniaXamlLoader.Parse<TestClassWithUri>(
$"<{testClass.Name} xmlns='clr-namespace:{testClass.Namespace}' Uri='/test'/>", testClass.Assembly);
Assert.False(parsed.Uri.IsAbsoluteUri);
}
}
public class TestClassWithUri
{
public Uri Uri { get; set; }
}
}
Loading…
Cancel
Save