按名称访问控制模板项

本文关键字:访问控制 | 更新日期: 2023-09-27 18:26:53

我有一个按钮:

<Button Name="btnPlayPause" HorizontalAlignment="Left" VerticalAlignment="Top" Height="30" Margin="8,10,0,0" Cursor="Hand" Click="btnPlayPause_Click">
    <Button.Template>
        <ControlTemplate>
            <Image Name="btnPlayPause_Image" Source="Images/Pause.png"/>
        </ControlTemplate>
    </Button.Template>
</Button>

我想更改C#中的Image(在ControlTemplate中)。我这样做:

//changing icon
BitmapImage iconPlay = new BitmapImage();
iconPlay.BeginInit();
iconPlay.UriSource = new Uri("images''Play.png", UriKind.Relative);
iconPlay.EndInit();
btnPlayPause_Image.Source = iconPlay;

但我无法访问btnPlayPause_Image。它说它在当前上下文中不存在

但为什么??

当我创建没有ControlTemplate:的按钮时

<Button Name="btnPlayPause" HorizontalAlignment="Left" VerticalAlignment="Top" Height="30" Margin="8,10,0,0" Cursor="Hand" Click="btnPlayPause_Click">
    <Image Name="btnPlayPause_Image" Source="Images/Pause.png"/>
</Button>

C#代码运行良好。它找到btnPlayPause_Image并成功更改图像源:

按名称访问控制模板项

Image不在窗口范围内。它在按钮的模板范围内。因此,您必须使用按钮模板的方法FindName,如下所示:

var img = btnPlayPause.Template.FindName("btnPlayPause_Image", btnPlayPause) as Image;   //second parameter is the "ParentTemplate"
if(img != null) img.Source = iconPlay;