为什么图片之间的绑定改变点击它不工作

本文关键字:工作 改变 绑定 之间 为什么 | 更新日期: 2023-09-27 18:12:00

我想当我按下灯泡按钮时,每次图片都会改变。我试过了,但没有成功。我的代码不工作,请告诉我为什么,谢谢。

下面是XAML中的UserControl:

<UserControl x:Class="PL_Wpf.CustomControls.Bulb"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"           
             mc:Ignorable="d" 
             >
    <Grid>                   
        <Button x:Name="BulbButton" Height="60" Width="40" Click="BulbButton_Click" >        
            <Button.Template>
                <ControlTemplate>
                    <Image  Source="../Pics/bulb_off.jpg" Width="40" Height="60"  >
                        <Image.Style>
                            <Style TargetType="{x:Type Image}">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding ElementName=Bulb, Path=OnOff}" Value="True">
                                        <Setter Property="Source" Value="../Pics/bulb_on.jpg" />
                                    </DataTrigger>
                                    <DataTrigger Binding="{Binding ElementName=Bulb, Path=OnOff}" Value="False">
                                        <Setter Property="Source" Value="../Pics/bulb_off.jpg" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Image.Style>
                    </Image>
                </ControlTemplate>
            </Button.Template>
        </Button>
    </Grid>
</UserControl>

后面的代码是:

public partial class Bulb : UserControl, INotifyPropertyChanged
{
    public bool OnOff { get; set; }
    public Bulb()
    {
        InitializeComponent();
        DataContext = this;
        OnOff = false;
    }
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, e);
        }
    }
    public void BulbButton_Click(object sender, RoutedEventArgs e)
    {
        OnOff = (OnOff == false) ? true : false;
    }
    public bool On
    {
        get { return OnOff; }
        set
        {
            OnOff = value;
            OnPropertyChanged(new PropertyChangedEventArgs("On"));
        }
    }
}

为什么图片之间的绑定改变点击它不工作

您可以通过修改复选框的控件模板来简单地实现您想要实现的控件。

只需在窗口中添加以下代码以取代控件:

<CheckBox>
        <CheckBox.Template>
            <ControlTemplate TargetType="CheckBox">
                <Grid>
                    <Image  Source="pack://siteoforigin:,,,/Pics/bulb_off.jpg" Width="40" Height="60"  />
                    <Image  Source="pack://siteoforigin:,,,/Pics/bulb_on.jpg" Width="40" Height="60" Name="CheckMark" />
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsChecked" Value="false">
                        <Setter TargetName="CheckMark" Property="Visibility" Value="Hidden"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </CheckBox.Template>
    </CheckBox>