我在下面为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 没有更新它。我可以知道如何解决这个问题吗?
在任何事件中更改代码
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";
}
}
您的代码会复制文本块的值,然后将名为"Text"的属性分配给副本的值。您从未实际更改按钮内的文本。您的文本块称为textblock1,textblock是从textblock1初始化的,但是一旦完成,它们就不会链接在一起。
自从我使用 WPF 以来已经有一段时间了,但您需要使用如下所示的内容将文本值重新分配给按钮:
textblock1.Text = textblock;
甚至更简单:
textblock1.Text = "sampletext2";