选择UWP-Hub内的元素

时间:2016-10-24 06:13:10

标签: c# uwp

在我关于“选择Hub中的元素”的研究中,我找到了this thread。在大多数情况下,FindChildControl函数适用于我,但不幸的是,这个函数似乎无法解决像Ellipses或Images这样的元素。 由于我是C#和UWP的初学者,有没有可能解决这些问题?

例如,这里有一些代码,应该解决“weatherSec”hub-section中的图像,但它仍然是null。

        Image ResImage = FindChildControl<Image>(weatherSec, "ResultImage") as Image;
        TextBlock ResultTextBlock = FindChildControl<TextBlock>(weatherSec, "ResultTextBlock") as TextBlock;
        //var position = await LocationManager.GetPosition();

        RootObject myWeather =
            await OpenWeatherMapProxy.GetWeather(
                51.43,
                6.75);

        string icon = String.Format("ms-appx:///Assets/Weather/{0}.png", myWeather.weather[0].icon);
        ResImage.Source = new BitmapImage(new Uri(icon, UriKind.Absolute));
        ResultTextBlock.Text = myWeather.name + " - " + ((int)myWeather.main.temp).ToString() + "°C - " + myWeather.weather[0].description;

问候 达达

1 个答案:

答案 0 :(得分:0)

  

但遗憾的是,这个函数似乎无法解决像Ellipses或Images这样的元素。

我检查了你的演示并重现了这个问题。问题是您将OnLoaded放在MainPage构造函数中,其中XAML尚未完全加载。所以你没有得到weatherSec中的Image元素(实际上你不能在那里得到任何元素,而不仅仅是ImageEclipses)。

要解决此问题,您需要将Onloaded置于MainPage.Loaded内,如下所示:

public MainPage()
{
    this.InitializeComponent();
    InitGPIO();
    this.Loaded += MainPage_Loaded;// add event
    //OnLoaded(); //comment out this line, the xaml hasn't been fully loaded
}

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    OnLoaded();
}