XAML меняет исходный путь SVG - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь реализовать приложение, которое запрашивает данные о погоде из OWM (OpenWeatherMap) и отображает температуру, а также значок погоды, соответствующий погоде на улице.OWM предоставляет идентификаторы значков для нужного значка.Затем вы можете получить доступ к этим значкам через определенный веб-путь.Отображение этих значков в моем приложении работало хорошо.Поскольку значки, предоставляемые OWM, имеют низкое разрешение, я решил использовать векторную графику, которую я сохранил в каталоге приложения.Отображение векторной графики напрямую с использованием этого кода

<Image Source="Assets/WeatherIcons/01d.svg" Height="300" HorizontalAlignment="Right"/>

работает просто отлично.Но я хочу настроить используемый источник в зависимости от предоставленного OWM значка id.Мой код на данный момент выглядит следующим образом:
MainPage.xaml:

<Page
    x:Class="starting.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:starting"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Black"
          PointerPressed="WakeUp">

        <StackPanel x:Name="WeatherInformation"
                    Visibility="Collapsed">

            <Image x:Name="WeatherIcon"
                   Height="300"
                   HorizontalAlignment="Right"/>

            <TextBlock Foreground="White"
                       TextAlignment="Center">

                <Run x:Name="Temperature" FontSize="90"/>
                <LineBreak/>
                <Run x:Name="WeatherDescription" FontSize="50"/>

            </TextBlock>

        </StackPanel>
    </Grid>
</Page>

MainPage.xaml.cs:

using System;
using System.Globalization;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media.Imaging;

namespace starting
{
    public sealed partial class MainPage : Page
    {
        private DispatcherTimer modeTimer = new DispatcherTimer();

        public MainPage()
        {
            this.InitializeComponent();
            updateWeather(this, this);

            modeTimer.Tick += new EventHandler<object>(Sleep);
            modeTimer.Interval = new TimeSpan(0, 1, 0);

            DispatcherTimer updateWeatherTimer = new DispatcherTimer();
            updateWeatherTimer.Tick += new EventHandler<object>(updateWeather);
            updateWeatherTimer.Interval= new TimeSpan(0, 30, 0);
            updateWeatherTimer.Start();
        }

        private void updateWeather(object sender, object e)
        {
            WeatherApp.WeatherAPI myWeatherApi = new WeatherApp.WeatherAPI("Friedrichshafen,de");
            OpenWeatherMapType.WeatherStream data = myWeatherApi.GetForecast();
            WeatherIcon.Source = new BitmapImage(new Uri("ms-appx:///Assets/WeatherIcons/" + data.Weather[0].Icon + ".svg"));
            Temperature.Text = Math.Round(data.Main.Temp).ToString() + "°C";
            WeatherDescription.Text = data.Weather[0].Description;
        }

        private void Sleep(object sender, object e)
        {
            StandByTime.Visibility = Visibility.Visible;
            ActiveTime.Visibility = Visibility.Collapsed;
            WeatherInformation.Visibility = Visibility.Collapsed;
            modeTimer.Stop();
        }

        private void WakeUp(object sender, PointerRoutedEventArgs e)
        {
            StandByTime.Visibility = Visibility.Collapsed;
            ActiveTime.Visibility = Visibility.Visible;
            WeatherInformation.Visibility = Visibility.Visible;
            modeTimer.Start();
        }
    }
}

При запуске приложения нет никаких признаковпоявляется значок погоды.Как это возможно?

1 Ответ

0 голосов
/ 27 февраля 2019

Кажется, все работает нормально:
MainPage.xaml:

<Page>
    <Grid>
        <Image Height="300">
            <Image.Source>
                <SvgImageSource x:Name="WeatherIconSource"/>
            </Image.Source>
        </Image>
    </Grid>
</Page>

MainPage.xaml.cs:

private void updateWeather(object sender, object e)
{
    WeatherApp.WeatherAPI myWeatherApi = new WeatherApp.WeatherAPI("Friedrichshafen,de");
    OpenWeatherMapType.WeatherStream data = myWeatherApi.GetForecast();
    WeatherIconSource.UriSource = new Uri("ms-appx:///Assets/WeatherIcons/" + data.Weather[0].Icon + ".svg");
}
...