2015-08-13 2 views
2

Я пытаюсь использовать XamlReader для синтаксического анализа файла XAML во время выполнения. К сожалению, я получаю исключение XamlParseException, когда XamlReader пытается прочитать относительные атрибуты, такие как RelativePanel.Below.WinRT/UWP: Загрузка RelativePanel с XamlReader вызывает XamlParseException с RelativePanels Attached Properties

Это код, чтобы загрузить файл XAML:

using System; 
using System.IO; 
using Windows.Storage; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
using Windows.UI.Xaml.Markup; 

namespace TestProject.UWP.Views 
{ 
    public sealed partial class LoginPage : Page 
    { 
     public LoginPage() 
     { 
      this.InitializeComponent(); 
      Loaded += OnLoaded; 
     } 

     private async void OnLoaded(object sender, RoutedEventArgs routedEventArgs) 
     { 
      var folder = Windows.ApplicationModel.Package.Current.InstalledLocation; 
      folder = await folder.GetFolderAsync("TestData"); 
      var file = await folder.GetFileAsync("LoginControl.xaml"); 
      var xaml = await FileIO.ReadTextAsync(file); 
      var content = (UserControl)XamlReader.Load(xaml); 
      this.Content = content; 
     } 
    } 
} 

И этот XAML файл я пытаюсь читать из местного содержания

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:TestProject.UWP.Views" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    d:DesignHeight="800" 
    d:DesignWidth="600"> 

    <RelativePanel Background="LightGray"> 
     <Border x:Name="logoBorder" BorderBrush="White" BorderThickness="0,0,0,1" Margin="30,30,30,10" Width="200" Height="60" Padding="0,0,0,5" RelativePanel.AlignLeftWithPanel="True" RelativePanel.AlignRightWithPanel="True" RelativePanel.AlignTopWithPanel="True" > 
      <Image Stretch="Uniform" Source="ms-appx:///Assets/Images/logo.png" Width="200" /> 
     </Border> 
     <Image x:Name="userIcon" Source="ms-appx:///Assets/Images/usericon.png" Margin="30,10" RelativePanel.AlignHorizontalCenterWithPanel="True" RelativePanel.AlignRightWith="logoBorder" Width="100" Height="100"/> 
    </RelativePanel> 
</UserControl> 

Когда я пытаюсь разобрать XAML я получаю следующее исключение: «Информация WinRT: ошибка RelativePanel: значение должно быть типа UIElement».

Как только я удаляю атрибут RelativePanel.AlignRightWith = "logoBorder" со второго изображения, все работает нормально.

ли кто-то есть идея, чтобы обойти эту проблему?

Редактировать: Прежде чем вы спросите. Затем xaml должен быть загружен с сервера, поэтому я не просто создаю экземпляр usercontrol в коде.

Приветствия

Kornelis

+3

Никогда не использовал его и не может проверить его здесь, но возможно, вы, вероятно, замените имя элемента привязкой ElementName, например «Относительная Panel.AlignRightWith = "{Binding ElementName = logoBorder}" '? – Clemens

+0

Спасибо, Клеменс, что сделал трюк :) – Kornelis

ответ

2

Заменить имя элемента в

RelativePanel.AlignRightWith="logoBorder" 

путем ElementName связывания:

RelativePanel.AlignRightWith="{Binding ElementName=logoBorder}" 
Смежные вопросы