0

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

4

1 回答 1

5

您可以在代码中使用事件和更改MouseEnter,但为什么不使用更改when is 。就像这样,当鼠标离开您的控件时,您不必处理状态,因为它只会重新评估您的样式并恢复到以前的图像源。 触发示例:MouseLeaveImage.SourceTriggersImage.SourceIsMouseOvertrue

<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更改SourceImage我使用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");
}
于 2013-05-25T12:17:06.160 回答