如何动态更改悬停在代码后面的WPF中的图像 我从db读取图像并读取悬停图像如何为图像源和悬停源编写代码?
答案 0 :(得分:4)
您可以使用MouseEnter
和MouseLeave
个活动,并在代码中更改Image.Source
,但在Triggers
时,为什么不使用Image.Source
更改IsMouseOver
是true
。就像那样,当鼠标离开你的控制器时你不必处理状态,因为它只会重新评估你的风格并恢复到以前的图像源。
触发示例:
<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");
}