我正在创建一个简单的metro应用程序来显示图像和与图像相关的一些内容。
Ex: 图像:数据 img1:“蝴蝶的形象” img2:“你好天空” img3:“金毛猎犬的图片”
我已将图像加载到flipview中。并将数据转换为数组。
<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>
我在xaml中有一个名为“tbN”的TextBlock。我想要做的是当我使用指针更改图像时,相关数据应显示在文本块中。
我尝试在选择更改事件
下面执行代码private void fiImage_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
int i = ((FlipView)sender).SelectedIndex;
tbN.Text = a[i]; //error line
}
但是当我执行程序时,我收到一条错误,说“用户代码未处理NullReferenceException:对象引用未设置为对象的实例。”
我错过了什么?
答案 0 :(得分:0)
似乎 a [i] 尚未初始化且没有值。它是一个全局变量吗? 调试代码并检查其内容。它必须为空。
如果它不为null,则该数组可能没有 i 值。或者它可能超出阵列长度。
tbN.Text = a[i]; //a[i] must be null, where is it initialized?
答案 1 :(得分:0)
SelectionChanged事件也会在初始化时触发(第一个子节点“已选中”)。 您的控制(tbN)当时不存在。
检查tbN是否为null以避免NRef。例外!
private void fiImage_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (tbN != null)
{
int i = ((FlipView)sender).SelectedIndex;
tbN.Text = a[i];
}
}
答案 2 :(得分:0)
我找到了解决方法HERE
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????");
}
});
}
}