2014-02-25 22 views
0

我在MyResourceDictionary.xaml文件中像这样如何更改控制模板内的图像源?

<ControlTemplate TargetType="{x:Type Button}" x:Key="ImageButtonTemplatepurpleSmall" > 
     <Grid> 
      <Image Source="images\button_purple_up_76.jpg" Name="image" /> 

     </Grid> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsMouseOver" Value="true"> 
       <Setter TargetName="image" Property="Source" Value="images\button_purple_hover_76.jpg" /> 
      </Trigger> 
      <Trigger Property="IsPressed" Value="true"> 
       <Setter TargetName="image" Property="Source" Value="images\button_purple_depressed_76.jpg" /> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 

这是目前的适用图像按钮 模板我只是想改变内网这一形象的这个图像源这样 这是我试过

Image RecTangleObj = (Image)btnBack.Template.FindName("image", btnBack); 

但有些如何总是返回空值我该如何改变这个图像源? 更新窗口

public override void OnApplyTemplate() 
     { 
      //base.OnApplyTemplate(); 
      //Image RecTangleObj = (Image)btnBack.Template.FindName("image", btnBack); 
      //if (RecTangleObj != null) 
      //{ 

      //} 
     } 
+0

你把这段代码放在哪里?模板是否已应用于按钮?我怀疑你正在做控制的构造函数。 –

+0

是的模板已经被应用我想更改该图像,如果用户上传了新的图像@RohitVats –

+0

请检查答案,并让我知道,如果它不适合你。 –

回答

2

OnApplyTemplate被调用时,没有孩子的内容在屏幕上呈现。

将此代码置于Loaded事件中,它将正常工作。

+0

雅其工作非常感谢我只是有一个问题,我想更改图像,而无需引用btnBack,所以连接到此的所有按钮都应用了新图像 –

+2

首先,您不应该从代码背后执行此操作。在ViewModel中拥有适当的属性并与之绑定(这是正确的方式),并在任何更改上设置该属性,以便自动更新。如果你仍然想这样做,你必须使用按钮的参考:( –

+0

确定,但我有上传按钮,所以有没有这方面的建议?使用viewmodel? –