[XamlC] allow xml-elements as Setter/Trigger Values (#684)
This commit is contained in:
Родитель
f30aa8ae2c
Коммит
ca7f2caf57
|
@ -5,6 +5,7 @@ using Mono.Cecil.Cil;
|
|||
|
||||
using Xamarin.Forms.Xaml;
|
||||
using Xamarin.Forms.Build.Tasks;
|
||||
using System.Xml;
|
||||
|
||||
namespace Xamarin.Forms.Core.XamlC
|
||||
{
|
||||
|
@ -12,7 +13,12 @@ namespace Xamarin.Forms.Core.XamlC
|
|||
{
|
||||
public IEnumerable<Instruction> ProvideValue(VariableDefinitionReference vardefref, ModuleDefinition module, BaseNode node, ILContext context)
|
||||
{
|
||||
var valueNode = ((IElementNode)node).Properties[new XmlName("", "Value")];
|
||||
INode valueNode = null;
|
||||
if (!((IElementNode)node).Properties.TryGetValue(new XmlName("", "Value"), out valueNode) && ((IElementNode)node).CollectionItems.Count == 1)
|
||||
valueNode = ((IElementNode)node).CollectionItems[0];
|
||||
|
||||
if (valueNode == null)
|
||||
throw new XamlParseException("Missing Value for Setter", (IXmlLineInfo)node);
|
||||
|
||||
//if it's an elementNode, there's probably no need to convert it
|
||||
if (valueNode is IElementNode)
|
||||
|
|
|
@ -5,6 +5,7 @@ using Mono.Cecil.Cil;
|
|||
|
||||
using Xamarin.Forms.Xaml;
|
||||
using Xamarin.Forms.Build.Tasks;
|
||||
using System.Xml;
|
||||
|
||||
namespace Xamarin.Forms.Core.XamlC
|
||||
{
|
||||
|
@ -12,7 +13,12 @@ namespace Xamarin.Forms.Core.XamlC
|
|||
{
|
||||
public IEnumerable<Instruction> ProvideValue(VariableDefinitionReference vardefref, ModuleDefinition module, BaseNode node, ILContext context)
|
||||
{
|
||||
var valueNode = ((IElementNode)node).Properties[new XmlName("", "Value")];
|
||||
INode valueNode = null;
|
||||
if (!((IElementNode)node).Properties.TryGetValue(new XmlName("", "Value"), out valueNode) && ((IElementNode)node).CollectionItems.Count == 1)
|
||||
valueNode = ((IElementNode)node).CollectionItems[0];
|
||||
|
||||
if (valueNode == null)
|
||||
throw new XamlParseException("Missing Value for Trigger", (IXmlLineInfo)node);
|
||||
|
||||
//if it's an elementNode, there's probably no need to convert it
|
||||
if (valueNode is IElementNode)
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Xamarin.Forms.Xaml.UnitTests.Bz51567">
|
||||
<ContentPage.Resources>
|
||||
<ResourceDictionary>
|
||||
<Style x:Key="ListText" TargetType="Label">
|
||||
<Setter Property="TextColor" Value="Black" />
|
||||
<Setter Property="FontSize">
|
||||
<OnPlatform x:TypeArguments="x:Double" iOS="17" Android="17" WinPhone="20" />
|
||||
</Setter>
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
</ContentPage.Resources>
|
||||
</ContentPage>
|
|
@ -0,0 +1,47 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using NUnit.Framework;
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Core.UnitTests;
|
||||
|
||||
namespace Xamarin.Forms.Xaml.UnitTests
|
||||
{
|
||||
public partial class Bz51567 : ContentPage
|
||||
{
|
||||
public Bz51567()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public Bz51567(bool useCompiledXaml)
|
||||
{
|
||||
//this stub will be replaced at compile time
|
||||
}
|
||||
|
||||
[TestFixture]
|
||||
class Tests
|
||||
{
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
Device.PlatformServices = new MockPlatformServices();
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
Device.PlatformServices = null;
|
||||
}
|
||||
|
||||
[TestCase(true)]
|
||||
[TestCase(false)]
|
||||
public void SetterWithElementValue(bool useCompiledXaml)
|
||||
{
|
||||
var page = new Bz51567(useCompiledXaml);
|
||||
var style = page.Resources["ListText"] as Style;
|
||||
var setter = style.Setters[1];
|
||||
Assert.NotNull(setter);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -409,6 +409,9 @@
|
|||
<Compile Include="Issues\Bz45179.xaml.cs">
|
||||
<DependentUpon>Bz45179.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Issues\Bz51567.xaml.cs">
|
||||
<DependentUpon>Bz51567.xaml</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="..\.nuspec\Xamarin.Forms.Debug.targets" />
|
||||
|
@ -739,6 +742,9 @@
|
|||
<EmbeddedResource Include="Issues\Bz45179.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Issues\Bz51567.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
|
||||
|
|
Загрузка…
Ссылка в новой задаче