我需要一个 Button,它会在每次 bool 值 (IsFavourite) 发生变化时更改其背景图像。 我用 DataTrigger 试过,但他不知道属性:“Source”。你能帮帮我吗,我不是那么喜欢 xaml 代码:-(
<Style x:Key="starButtonStyle" TargetType="{x:Type Button}">
<Setter Property="IsEnabled" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Image x:Name="PART_img" Source="/FtpUploadClient;component/media/star_off_48.png" Height="28" Width="28" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="PART_img"
Property="Source"
Value="/FtpUploadClient;component/media/star_48.png" />
</Trigger>
<DataTrigger Binding="{Binding Path=IsFavourite}" Value="True">
<Setter Property="Source" Value="/FtpUploadClient;component/media/star_48.png" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsFavourite}" Value="False">
<Setter Property="Source" Value="/FtpUploadClient;component/media/star_off_48.png" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
private void StarButton_Click(object sender, RoutedEventArgs e)
{
IsFavourite = !IsFavourite;
}
private bool isFavourite = false;
public bool IsFavourite
{
get { return isFavourite; }
set
{
isFavourite = value;
OnPropertyChanged("IsFavourite");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
-- 按钮事件 Click 调用一个改变 IsFavourite 的方法:
<Button Content="Star" Style="{DynamicResource starButtonStyle}" Click="StarButton_Click" />
最佳答案
将触发器添加到图像样式而不是 ControlTemplate
<Image HorizontalAlignment="Center" VerticalAlignment="Center" Height="28" Width="28">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Source" Value="/FtpUploadClient;component/media/star_off_48.png" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Source" Value="/FtpUploadClient;component/media/star_48.png" />
</Trigger>
<DataTrigger Binding="{Binding Path=IsFavourite}" Value="True">
<Setter Property="Source" Value="/FtpUploadClient;component/media/star_48.png" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
关于c# - 如何更改 WPF 中的按钮样式,由 bool 值触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7234981/