按名称访问控制模板项
本文关键字:访问控制 | 更新日期: 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;