0

我正在制作一个简单的地铁应用程序来显示图像和与图像相关的一些内容。

例如:图像:数据 img1:“蝴蝶的图像” img2:“你好天空” img3:“金毛猎犬的照片”

我已将图像加载到翻转视图中。并将相关数据加载到数组中。

<FlipView HorizontalAlignment="Left" Margin="102,147,0,0" VerticalAlignment="Top" Width="627" Height="429" Name="fiImage" SelectionChanged="fiImage_SelectionChanged">
      <Image Source="Assets/image1.png"  Name="Img1" />
      <Image Source="Assets/image2.png"  Name="Img2" />
</FlipView>

我在名为“tbN”的 xaml 中有一个 TextBlock。我想要做的是当我使用指针更改图像时,相关数据应显示在文本块中。

我在选择更改事件中尝试了以下代码

private void fiImage_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    int i = ((FlipView)sender).SelectedIndex;
    tbN.Text = a[i];  //error line
}

但是当我执行程序时,我收到一条错误消息,提示“用户代码未处理 NullReferenceException:对象引用未设置为对象的实例。”

我错过了什么?

4

3 回答 3

0

SelectionChanged 事件也会在初始化时触发(第一个孩子“选中”)。您的控制权 (tbN) 当时不存在。

检查 tbN 是否为空以避免 NRef。例外!

private void fiImage_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (tbN != null)
    {
        int i = ((FlipView)sender).SelectedIndex;
        tbN.Text = a[i]; 
    }
}
于 2014-06-25T20:42:17.067 回答
0

似乎a[i]没有被初始化并且没有值。它是一个全局变量吗?调试您的代码并检查其内容。它必须为空。

如果它不为空,则该数组可能没有i值。或者它可能超出了数组长度。

tbN.Text = a[i]; //a[i] must be null, where is it initialized?
于 2013-05-07T07:47:11.990 回答
0

我在这里找到了解决方案

private void FlipView_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
    FlipView fv = sender as FlipView;
    if (fv.SelectedItem == null) return;
    var item = fv.ItemContainerGenerator.ContainerFromItem(fv.SelectedItem);
    if (item == null)
    {
        Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                var itemSecondTime = fv.ItemContainerGenerator.ContainerFromItem(fv.SelectedItem);
                if (itemSecondTime == null)
                {
                    throw new InvalidOperationException("no item.  Why????");
                }
            });
    }
}
于 2018-11-21T13:27:50.040 回答