如何使用方法更新文本块

How to update textblock with method

我有一个供用户输入字符串的文本框。我如何将该字符串传递给方法和 toUpper() 它。并将字符串传回主 window 中的文本块,框和块都实时更新?

对于我的 C# 代码:

public MainWindow()
    {
        InitializeComponent();

    }
private  void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {

        textBlock.Text = textBox.Text +"changed";
        
        
    }

就这么简单

我的 xaml 代码:

<Grid >
    
   
    <TextBox x:Name ="textBox" HorizontalAlignment="Left" Height="105" Margin="28,185,0,0" TextWrapping="Wrap" Text="HELLO" VerticalAlignment="Top" Width="300" TextChanged="TextBox_TextChanged"/>
    <TextBlock x:Name="textBlock" HorizontalAlignment="Left" Height="116" Margin="114,40,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="328"/>
</Grid>

我想知道为什么当我在文本框中输入内容时无法更新文本块中的文本。

你需要这样的东西吗?

private  void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        textBox.Text = textBox.Text?.ToUpper();
        textBlock.Text = textBox.Text;
        textBox.CaretIndex = textBox.Text?.Length ?? 0; //You need this to continue typing from the last index onwards..
        
    }

我不太明白你是需要同时更改 textBoxtextBlock 还是只需要 textBlockUpperCase 中, 但概念是一样的

我结合了@Yavor Georgiev的回答

您遇到空引用异常。创建 textBox 控件时,它将触发 textBox 上的 textChange 事件,此时,textBlock 尚未创建,因此为 null。您只需更改 XAML 中文本框的顺序就可以了。

更改顺序

Grid>
    <TextBlock x:Name="textBlock" HorizontalAlignment="Left" Height="116" Margin="114,40,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="328"/>
    <TextBox x:Name ="textBox" HorizontalAlignment="Left" Height="105" Margin="28,185,0,0" TextWrapping="Wrap" Text="HELLO" VerticalAlignment="Top" Width="300" TextChanged="TextBox_TextChanged"/>
   
</Grid>

对于上半部分,我在输入时使用了@Yavor Georgiev 的回答

  private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        textBox.Text = textBox.Text?.ToUpper();
        textBlock.Text = textBox.Text;
        textBox.CaretIndex = textBox.Text?.Length ?? 0; 
        textBlock.Text = textBox.Text + "changed";           
    }