c# - 如何更改 WPF 中的按钮样式,由 bool 值触发?

标签 c# wpf xaml

我需要一个 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/

相关文章:

c# - 使用 SSH.NET 在端口 990 上连接到 FTP 站点时出现 "The server response contains a null character"

c# - 如何使用 C# WPF 打开 chm 文件中的特定页面

.net - 哪个 WPF 控制套件最适合 MVVM?

c# - 如何在 Xamarin Forms 中将 BackgroundImage 添加到 ListView?

c# - 使用 bool 值绑定(bind)文本 block 的可见性不起作用

c# - 如何调整图像的标签 "inside"Xamarin Forms

c# - 使用 .Net Core 3.0 访问 SerialPort 类

c# - 我怎样才能让一个窗口看起来像一个框架?

c# - ASP.NET MVC FakeItEasy - 模拟 session 在单元测试中不返回正确的值

c# - 使用c#在wpf listview中添加图像