当我点击Button
时,其中的图片必须更改并保持更改状态。我尝试使用Triggers
Button
上的Style
,将图像绑定到IsPressed
属性,但是当Button
被释放时,图像会返回前一个。请帮忙。
<Button Content="Easy Locate" Height="20" Width="85" Margin="0,2,0,0">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border BorderThickness="0">
<Image Source="/AltusClient;component/Images/waiting.png"
Height="20"
Width="25"/>
</Border>
<!--<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
</Trigger>
</ControlTemplate.Triggers>-->
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
答案 0 :(得分:1)
这是一个按照您想要的方式工作的按钮示例。您可以通过添加另一个Trigger
将Tag
属性设置为null
,空字符串或除{{1}之外的世界上的任何内容,轻松地将按钮切换回其默认状态}}。
"ButtonHasBeenPressed"
答案 1 :(得分:0)
您也可以使用代码隐藏。
假设按钮是:
<Button Click="Button_Click">
<Image Source="/Image1.png"/>
</Button>
然后,后面的代码可能是:
private void Button_Click(object sender, RoutedEventArgs e)
{
var b = sender as Button;
if (b == null)
return;
var image = new Image { Source = GetImageSource(), };
b.Content = image;
}
private BitmapImage GetImageSource()
{
var imageSource = new BitmapImage();
imageSource.BeginInit();
imageSource.UriSource = new Uri("/Image2.png", UriKind.Relative);
imageSource.EndInit();
return imageSource;
}
这是一个简化版本,每次用户点击时都会加载新图像。如果您想避免不必要的二次加载,可以设置private bool _imageSet;
之类的私有标记,并将其设置为Button_Click
方法。
您也可以在Window(或UserControl)初始化的早期加载新图像。
最后,我建议您将所有图片放在ResourceDictionary
中,并通过StaticResource
Key
在整个应用程序中调用它们,而不是全部使用URI。但这是另一个话题。