c# - WPF 新增功能 - 更新代码中的 TextBlock 导致 NullReferenceException

标签 c# wpf xaml

我对 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,但我不知道如何做到这一点。

最佳答案

尝试使用绑定(bind)而不是事件处理程序:

<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">
            <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="{Binding SelectedItem.Content, ElementName=VideoListBox}"
            x:Name="VideoTextBlock"
            FontSize="48"/>
    </Grid>
</Window>

如果这不能满足您的需求,我会在您尝试访问它之前检查是否为空:

private void VideoListBox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
    if (VideoTextBlock != null)
    {
        VideoTextBlock.Text = "Test";
    }
}

关于c# - WPF 新增功能 - 更新代码中的 TextBlock 导致 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17959096/

相关文章:

c# - 在 C# 中获取 datagridview 中每一行的时间跨度

c# - log4net - 如何在连接断开后重新建立与数据库的连接

c# - Horizo​​ntalAlignment ="Stretch"在 TreeViewItem 中不起作用

c# - 在 WPF 中为组合框设置默认名称

wpf - 如何从 GridView 中绑定(bind)到 ViewModel 的属性

C#泛型类类型参数和与泛型参数相同的约束

c# - 将任何 XML 文档绑定(bind)到 WPF TreeView

wpf - 当我离开它时,为什么我的 DataGridComboBoxColumn 会清除它的值?

c# - WPF c# webbrowser 在顶部菜单上滚动

wpf - MVVM 绑定(bind)到 InkCanvas