C# 如何更改WPF中由布尔值触发的按钮样式?

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是否实现

我需要一个按钮,每次布尔值(IsFavorite)改变时,它都会改变他的背景图像。 我用DataTrigger试过,但他不知道属性:“源”。你能帮我一下吗,我不太喜欢xaml代码:-(

-- button事件Click调用一个方法来更改IsFavorite:

<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>