C# 如何更改WPF中由布尔值触发的按钮样式?
我需要一个按钮,每次布尔值(IsFavorite)改变时,它都会改变他的背景图像。 我用DataTrigger试过,但他不知道属性:“源”。你能帮我一下吗,我不太喜欢xaml代码:-( -- button事件Click调用一个方法来更改IsFavorite:C# 如何更改WPF中由布尔值触发的按钮样式?,c#,wpf,xaml,C#,Wpf,Xaml,我需要一个按钮,每次布尔值(IsFavorite)改变时,它都会改变他的背景图像。 我用DataTrigger试过,但他不知道属性:“源”。你能帮我一下吗,我不太喜欢xaml代码:-( -- button事件Click调用一个方法来更改IsFavorite: <Button Content="Star" Style="{DynamicResource starButtonStyle}" Click="StarButton_Click" /> 1)您的datacontext是否实现
<Button Content="Star" Style="{DynamicResource starButtonStyle}" Click="StarButton_Click" />
1)您的datacontext是否实现了INotifyPropertyChanged
,并且是否在setter上引发了PropertyChanged(“IsFavorite”)
?这将确保在属性更改时通知视图
2) 尝试放置“Image.Source”
,而不仅仅是“Source”
3) 尝试在setter上使用TargetName=“PART_img”
。1)您的datacontext是否实现了INotifyPropertyChanged
,并且是否在setter上引发了PropertyChanged(“IsFavorite”)
?这将确保在属性更改时通知视图
2) 尝试放置“Image.Source”
,而不仅仅是“Source”
3) 尝试在setter上使用
TargetName=“PART_img”
。按钮没有源属性
您试图通过将TargetName=“PART\u img”
添加到设置器按钮没有源属性,来设置图像的源
您正试图通过将TargetName=“PART_img”
添加到设置器中来设置图像的源,将触发器添加到图像样式中,而不是控制模板
<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>
将触发器添加到图像样式,而不是控制模板
<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>
解决了这个问题:
使用Rachels XAML和属性:this.DataContext=Classname代码>在它工作的构造函数中:-)解决了它:
使用Rachels XAML和属性:this.DataContext=Classname代码>在构造函数中起作用:-)2)按钮也没有图像
属性。2)按钮也没有图像
属性。我一点也不知道。我要做的是创建一个按钮并直接设置背景,这样您就可以知道属性名称和值的语法。您可以在StarButton\u单击中发布代码吗?只是想澄清一下,不起作用的部分是IsFavorite
值在单击按钮时没有改变?添加代码后,不起作用的部分是PropertyChangedEventHandlernull@myName您的类是否实现了INotifyPropertyChanged
?@Rachel当然看下面,我已经解决了;-)我一点也不知道。我要做的是创建一个按钮并直接设置背景,这样您就可以知道属性名称和值的语法。您可以在StarButton\u单击中发布代码吗?只是想澄清一下,不起作用的部分是IsFavorite
值在单击按钮时没有改变?添加代码后,不起作用的部分是PropertyChangedEventHandlernull@myName您的类是否实现了INotifyPropertyChanged
?@Rachel当然看下面,我已经解决了;-)@我的名字我不知道你说的“处理者”是什么意思?如果在isfavorite
的getter中放置断点,是否会调用该断点?是否已在上面添加了我的C#-代码,并且会调用该getter。@myName是否正在尝试从按钮更改isfavorite
的值?或者尝试根据isfavorite
的值更改按钮上显示的图像?现在,您的处理程序将永远不会被调用,因为您没有更改isfavorite
的值。我已在更改isfavorite的按钮中添加了OnClick事件,并且还尝试在我的类的构造函数之后直接更改值,但没有任何效果。缺少的代码:
@myName我不知道你说的“handler”是什么意思?如果在isfavorite
的getter中放置断点,是否会调用该断点?是否已在上面添加了我的C#-代码,并且会调用该getter。@myName是否正在尝试从按钮更改isfavorite
的值?或者尝试根据isfavorite
的值更改按钮上显示的图像?现在,您的处理程序将永远不会被调用,因为您没有更改isfavorite
的值。我已在更改isfavorite的按钮中添加了OnClick事件,并且还尝试在我的类的构造函数之后直接更改值,但没有任何效果。缺少的代码:
<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>