Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF中单击时更改圆形按钮背景图像_C#_Wpf_Windows Phone 8 - Fatal编程技术网

C# 在WPF中单击时更改圆形按钮背景图像

C# 在WPF中单击时更改圆形按钮背景图像,c#,wpf,windows-phone-8,C#,Wpf,Windows Phone 8,我下面有一个圆形按钮 <Button x:Name="btnLight" Width="72" Height="72" Content="" Margin="180,0,372,94" VerticalAlignment="Bottom" d:LayoutOverrides="VerticalAlignment"> <Button.Template> <ControlTemplate>

我下面有一个圆形按钮

<Button  x:Name="btnLight" Width="72" Height="72" Content="" Margin="180,0,372,94" VerticalAlignment="Bottom" d:LayoutOverrides="VerticalAlignment">
            <Button.Template>
                <ControlTemplate>
                    <Grid>
                        <Ellipse>
                            <Ellipse.Fill>
                                <ImageBrush ImageSource="Images/light-off.jpg"/>
                            </Ellipse.Fill>
                        </Ellipse>
                    </Grid>
                </ControlTemplate>
            </Button.Template>
    </Button>
单击时如何更改背景图像Images/light-on.jpg?
谢谢大家!

要正确执行此操作,您需要创建一个视图模型,其中包含按钮按下时要调用的处理程序和一个可用于datatrigger更改图像的布尔属性。从视图模型开始:

public class ViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public RelayCommand OnClickedCommand { get; private set; }

    private bool _ImageChanged;
    public bool ImageChanged
    {
        get { return this._ImageChanged; }
        private set {
            this._ImageChanged = value;
            OnPropertyChanged("ImageChanged");
        }
    }

    public ViewModel()
    {
        this.OnClickedCommand = new RelayCommand(param => OnClicked());
    }

    private void OnClicked()
    {
        this.ImageChanged = true;
    }
}
现在创建一个实例,并将其设置为按钮的数据上下文。您的按钮XAML应该如下所示:

<Button x:Name="btnLight" Margin="148,0,372,63" VerticalAlignment="Bottom" Command="{Binding OnClickedCommand}" Height="69">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <Grid>
                                <Ellipse>
                                    <Ellipse.Fill>
                                        <ImageBrush ImageSource="image1.png"/>
                                    </Ellipse.Fill>
                                </Ellipse>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ImageChanged}" Value="True">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate>
                                    <Grid>
                                        <Ellipse>
                                            <Ellipse.Fill>
                                                <ImageBrush ImageSource="image2.png"/>
                                            </Ellipse.Fill>
                                        </Ellipse>
                                    </Grid>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

要正确地执行此操作,您需要创建一个视图模型,其中包含按钮按下时要调用的处理程序和可用于datatrigger更改图像的布尔属性。从视图模型开始:

public class ViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public RelayCommand OnClickedCommand { get; private set; }

    private bool _ImageChanged;
    public bool ImageChanged
    {
        get { return this._ImageChanged; }
        private set {
            this._ImageChanged = value;
            OnPropertyChanged("ImageChanged");
        }
    }

    public ViewModel()
    {
        this.OnClickedCommand = new RelayCommand(param => OnClicked());
    }

    private void OnClicked()
    {
        this.ImageChanged = true;
    }
}
现在创建一个实例,并将其设置为按钮的数据上下文。您的按钮XAML应该如下所示:

<Button x:Name="btnLight" Margin="148,0,372,63" VerticalAlignment="Bottom" Command="{Binding OnClickedCommand}" Height="69">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <Grid>
                                <Ellipse>
                                    <Ellipse.Fill>
                                        <ImageBrush ImageSource="image1.png"/>
                                    </Ellipse.Fill>
                                </Ellipse>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ImageChanged}" Value="True">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate>
                                    <Grid>
                                        <Ellipse>
                                            <Ellipse.Fill>
                                                <ImageBrush ImageSource="image2.png"/>
                                            </Ellipse.Fill>
                                        </Ellipse>
                                    </Grid>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

哇!这里给了你一些复杂的答案。。。你们做的工作太多了!!!这个问题有一个非常简单的解决方案。首先,让我们按照应该的方式整理一下这个ControlTemplate:


哇!这里给了你一些复杂的答案。。。你们做的工作太多了!!!这个问题有一个非常简单的解决方案。首先,让我们按照应该的方式整理一下这个ControlTemplate:


作为将来的参考,你可能想多注意一下你如何表达你的问题。它的措辞表明你希望背景永久改变,这就是为什么我们的其他答案如此复杂的原因。显然,如果您只想在按下按钮时更改,那么答案很简单,正如Sheridan在这里指出的,但您的问题不是这样写的。@MarkFeldman,虽然我理解您的观点,但当您在答案中添加注释时,您似乎是在对答案作者进行注释。当对问题作者发表评论时,更习惯于对问题添加评论。@Sheridan,现在我想知道当单击时,按钮会改变图片,当再次单击时,按钮会再次改变以前的图片,我该怎么做,谢谢?我尝试更改触发器属性,但没有更改worked@MarkFeldman谢谢你的评论,下次我会更详细careful@5fox,在本网站上,通常每篇文章都会问一个问题。既然你最初的问题已经得到了回答,你能在新的帖子里问这个新问题吗?若你们在某个地方提到我的名字并加上“@”,那个么我会收到通知,我会看一看。为了将来的参考,你们可能需要多注意一下你们如何表达你们的问题。它的措辞表明你希望背景永久改变,这就是为什么我们的其他答案如此复杂的原因。显然,如果您只想在按下按钮时更改,那么答案很简单,正如Sheridan在这里指出的,但您的问题不是这样写的。@MarkFeldman,虽然我理解您的观点,但当您在答案中添加注释时,您似乎是在对答案作者进行注释。当对问题作者发表评论时,更习惯于对问题添加评论。@Sheridan,现在我想知道当单击时,按钮会改变图片,当再次单击时,按钮会再次改变以前的图片,我该怎么做,谢谢?我尝试更改触发器属性,但没有更改worked@MarkFeldman谢谢你的评论,下次我会更详细careful@5fox,在本网站上,通常每篇文章都会问一个问题。既然你最初的问题已经得到了回答,你能在新的帖子里问这个新问题吗?若你们提到我的名字的某个地方有“@”,那个么我会收到通知,我会看一看。