我需要一个按钮,每当布尔值(IsFavourite)发生变化时,它会改变他的Backgroundimage。 我尝试使用DataTrigger,但他不知道属性:“Source”。你能帮我吗,我不是那个xaml-code :-(
<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" />
答案 0 :(得分:5)
将触发器添加到图像样式而不是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>
答案 1 :(得分:0)
1)你的datacontext是否实现了INotifyPropertyChanged
,并且在setter上引发了PropertyChanged("IsFavourite")
?这将确保在该属性更改时通知您的视图。
2)尝试放"Image.Source"
而不是"Source"
3)尝试在setter上使用TargetName="PART_img"
。
答案 2 :(得分:0)
Button
没有Source
属性。
您试图通过将Source
添加到Image
来设置TargetName="PART_img"
的{{1}}。
答案 3 :(得分:0)
解决了它:
使用Rachels XAML和构造函数中的属性this.DataContext = Classname;
,它可以工作: - )