wpf 更改控件模板中嵌入的TextBlock的文本值

8oomwypt  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(258)

我有一个控件模板中的TextBlock。我想用TextBox的Text值更改所述TextBlock的Text。该值应在按钮单击事件中设置,但我尝试的方法无法实现。单击事件将给予错误消息,指出text为空。
我是新来的WPF,并会感谢任何帮助。
控件模板的XAML:

<Window.Resources>
    <ControlTemplate x:Key="panel" TargetType="Button">
        <Grid>
            <Rectangle x:Name="rectangle" Width="auto" Height="55" RadiusX="10" RadiusY="10"
                         Fill="White">
            </Rectangle>
            
            <TextBlock x:Name="txtBlk" Text="" Margin="10,10,0,0" />
        </Grid>
    </ControlTemplate>
</Window.Resources>

Button_Click事件的C#:

private void panelBtn_Click(object sender, RoutedEventArgs e)
{
    var text = (TextBlock)this.Template.FindName("txtBlk", this);
    text.Text = txtBox.Text;
}
bvjveswy

bvjveswy1#

您应该像这样引用按钮的模板。

private void panelBtn_Click(object sender, RoutedEventArgs e)
{
    if (sender is Button btn)
    {
        var text = btn.Template.FindName("txtBlk", btn) as TextBlock;
        text.Text = txtBox.Text;
    }
}
sg2wtvxw

sg2wtvxw2#

@MuhammadSulaiman正确地回答了你,但我会建议你改变实现。
与其在模板中查找元素,不如添加该元素将引用的资源并更改该资源。
第一个
您也可以变更XAML中的初始文字:

<Button Template="{DynamicResource panel}">
        <Buttun.Resources>
            <sys:String x:Key="button.Text">Other Text</sys:String>
        </Buttun.Resources>
    </Buttun>

同样地,您可以透过这个容器的资源,为位于一个通用容器中的所有按钮设定通用初始文字。

相关问题