WPF UI 不更新控件模板中的文本块

WPF UI doesn't update textblock in controltemplate

我为下面的 WPF 创建了一个示例 XAML 和 C#:

XAML :

<Button Name="btn">
    <Button.Template>
        <ControlTemplate>
            <Grid>
                <TextBlock Name="textblock1" Text="sampletext1" />
            <Grid>
        <ControlTemplate>
    </Button.Template>
</Button>

C# :

Grid grid = btn.Template.LoadContent() as Grid;
var textblock = grid.FindName("textblock1") as TextBlock;
textblock.Text = "sampletext2";

我能够检索和更改隐藏代码中的文本块文本,但 UI 似乎没有更新它。我可以知道如何解决这个问题吗?

您的代码复制文本块的值,然后将名为 "Text" 的 属性 分配给副本的值。您永远不会真正更改按钮内的文本。您的文本块称为 textblock1,textblock 是从 textblock1 初始化的,但是一旦完成,它们就不会链接在一起。

自从我使用 WPF 以来已经有一段时间了,但您需要使用类似这样的方法将文本值重新分配给按钮:

textblock1.Text = textblock;

或更简单:

textblock1.Text = "sampletext2";

在任何活动中更改您的代码

 public partial class MainWindow : Window
    {

        public MainWindow()
        {
            InitializeComponent();
            this.Loaded += MainWindow_Loaded;

        }

        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            TextBlock textBlockInTemplate = (TextBlock)btn.Template.FindName("textblock1", btn);
            textBlockInTemplate.Text = "SampleText2";
        }

    }