单击时Wpf切换按钮内容

Has*_*iri 9 .net c# windows wpf

我想更改按钮内容取决于之前的内容舔如果它的添加它应该在保存中更改,如果它保存然后它应该更改为添加.我知道如何更改按钮的内容但是如何阅读要更改的内容.

Rhy*_*ous 14

如果您使用的是MVVM,请将内容绑定到值并将命令绑​​定到function.

<Button Content="{Binding ButtonText}" Command="{Binding ButtonClickCommand}"/>
Run Code Online (Sandbox Code Playgroud)

当然,然后在ViewModel中将String ButtonText和ButtonClickCommand作为属性.

private string _ButtonText;
public string ButtonText
{
    get { return _ButtonText ?? (_ButtonText = "Add"); }
    set
    { 
        _ButtonText = value;
        NotifyPropertyChanged("ButtonText"); 
    }
}

private ICommand _ButtonClickCommand;
public ICommand ButtonClickCommand
{
    get { return _ButtonClickCommand ?? (_ButtonClickCommand = _AddCommand); }
    set
    {
        _ButtonClickCommand = value;
        NotifyPropertyChanged("ButtonClickCommand");
    }
} 

private ICommand _AddCommand = new RelayCommand(f => Add());
private ICommand _SaveCommand = new RelayCommand(f => Save());

private void Add()
{
    // Add your stuff here

    // Now switch the button   
    ButtonText = "Save";
    ButtonClickCommand = SaveCommand;
}

private void Save()
{
    // Save your stuff here

    // Now switch the button   
    ButtonText = "Add";
    ButtonClickCommand = AddCommand;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以让ButtonClickCommand更改属性,绑定可以处理所有事情.


Nik*_*wal 7

将最后一次单击的值存储在该按钮的tag属性中,并在单击时检查其值.

标签说明

获取或设置可用于存储有关此元素的自定义信息的任意对象值.

MSDN链接

要么

void MyButton_OnClick(object sender, RoutedEventArgs e)
{
    if(mybutton.Content.ToString() == "Add")
    {
        \\ Lines for add
        mybutton.Content = "Save";
    }
    else
    {
        \\ Lines for Save
        mybutton.Content = "Add";    
    }
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*tin 7

我同意Surfens的回答,这里的问题不是一个完美的例子,ToggleButton因为"保存"和"添加"一个非常不同的操作,每个操作都应该在相应的按钮上设置自己的"ICommand".

但是这里有一些样式会根据IsCheckedToggleButton 的值改变内容.

如果未选中该按钮,则内容将为"ValueForUnToggledState",并在选中时更改为"ValueForToggledState".

<ToggleButton>
    <ToggleButton.Style>
        <Style TargetType="{x:Type ToggleButton}">
            <Setter Property="Content" Value="ValueForUnToggledState" />
            <Style.Triggers>
                <Trigger Property="IsChecked" Value="True">
                    <Setter Property="Content" Value="ValueForToggledState" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ToggleButton.Style>
</ToggleButton>
Run Code Online (Sandbox Code Playgroud)

这比其他一些答案更像WPF.