【发布时间】:2013-07-30 23:17:11
【问题描述】:
我是 WPF 的新手,每当 ListBox 中的选定项目发生变化时,我都会尝试更新 TextBlock 中的文本。
我将 ListBox 和 TextBlock 添加到我的 XAML:
<Window x:Class="Blend_Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" WindowState="Maximized" ResizeMode="NoResize" Width="{DynamicResource {x:Static SystemParameters.PrimaryScreenWidthKey}}" Height="{DynamicResource {x:Static SystemParameters.PrimaryScreenHeightKey}}">
<Grid Background="#FFC10000">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ListBox Grid.Column="0" Margin="20" FontSize="48" Name="VideoListBox" SelectedIndex="0" Cursor="None" SelectionChanged="VideoListBox_SelectionChanged">
<ListBoxItem Margin="20">Video 1</ListBoxItem>
<ListBoxItem Margin="20">Video 2</ListBoxItem>
<ListBoxItem Margin="20">Video 3</ListBoxItem>
<ListBoxItem Margin="20">Video 4</ListBoxItem>
</ListBox>
<TextBlock Grid.Column="1" Text="Lorem Ipsum" x:Name="VideoTextBlock" FontSize="48"></TextBlock>
</Grid>
</Window>
但现在我不确定要在后面的代码中添加什么。到目前为止我所拥有的是:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void VideoListBox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
VideoTextBlock.Text = "Test";
}
}
但是,当我运行它时,我收到了 NullReferenceException 错误。我想我需要以某种方式初始化 TextBlock,但我不知道该怎么做。
【问题讨论】:
-
是否发生在
VideoTextBlock.Text = "Test";? -
是的,这就是错误发生的时候。
-
这是因为
ListBox在 XAML 中的TextBlock之前创建,并且一旦创建了ListBox,就会触发SelectionChanged事件 - 请注意此时 @ 987654328@ 仍然没有创建,所以你得到一个NulReferenceException。不确定您的设计是什么,但您可以在更改其文本之前检查TextBlock是否为空。显示窗口后,您会注意到更改所选项目实际上会更新TextBlock。