如何动态地在代码后面的WPF中悬停图像?

时间:2013-05-25 11:15:55

标签: c# wpf

如何动态更改悬停在代码后面的WPF中的图像 我从db读取图像并读取悬停图像如何为图像源和悬停源编写代码?

1 个答案:

答案 0 :(得分:4)

您可以使用MouseEnterMouseLeave个活动,并在代码中更改Image.Source,但在Triggers时,为什么不使用Image.Source更改IsMouseOvertrue。就像那样,当鼠标离开你的控制器时你不必处理状态,因为它只会重新评估你的风格并恢复到以前的图像源。

触发示例:

<ContentControl>
   <ContentControl.Resources>
      <BitmapImage UriSource="ad.png" x:Key="ImgBtnLightbulbOff"/>
      <BitmapImage UriSource="ae.png" x:Key="ImgBtnLightbulbOn"/>
   </ContentControl.Resources>
   <ContentControl.Template>
      <ControlTemplate TargetType="{x:Type ContentControl}">
         <Image Source="{StaticResource ImgBtnLightbulbOff}" x:Name="PART_Image"/>
         <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
               <Setter TargetName="PART_Image" Property="Source" Value="{StaticResource ImgBtnLightbulbOn}"/>
            </Trigger>
         </ControlTemplate.Triggers>
      </ControlTemplate>
   </ContentControl.Template>
</ContentControl>

Image必须包含在其他控件中,因为IsMouseOver触发器并未单独Source更改Image。我使用Resource图像,但可以从任何地方拍摄,例如数据绑定。

但是如果你仍然需要在代码后面这里做一个例子:
XAML

<Image Source="{StaticResource ImgBtnLightbulbOff}" 
   MouseEnter="Image_MouseEnter" 
   MouseLeave="Image_MouseLeave"/>

代码:

private void Image_MouseLeave(object sender, MouseEventArgs e)
{
   var img = sender as Image;
   img.Source = (ImageSource)img.FindResource("ImgBtnLightbulbOff");
}

private void Image_MouseEnter(object sender, MouseEventArgs e)
{
   var img = sender as Image;
   img.Source = (ImageSource)img.FindResource("ImgBtnLightbulbOn");
}