1
我對WPF非常陌生,我試圖在ListBox中的選定項目發生更改時更新TextBlock中的文本。WPF的新手 - 在代碼中更新TextBlock導致NullReferenceException
我添加了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」;'? – PoweredByOrange
是的,那是錯誤發生的時間。 – MattSavage
這是因爲在你的XAML的'TextBlock'之前創建了'ListBox',並且一旦創建了一個'ListBox','SelectionChanged'事件被觸發 - 注意到在這一點上'TextBlock'還沒有被創建,所以你得到一個'NulReferenceException'。不知道你的設計是什麼,但你可以在更改文本之前檢查'TextBlock'是否爲null。一旦顯示窗口,您會注意到更改選定的項目實際上會更新「TextBlock」。 – PoweredByOrange