按钮`s内容在变动

时间:2016-10-14 12:24:25

标签: c# wpf button mvvm

我有一个WPF-MVVM应用程序,我正在使用ViewModel绑定我的按钮内容。 有时会发生新内容包含"()"。

内的文字
   <Button Grid.Row="0" Content="{Binding UnfinishedText}"
                            FontSize="22" Grid.Column="7"
                            Height="Auto" Foreground="White"
                            Style="{StaticResource MaterialDesignToolButton}"
                            Command="{Binding ShowUnfinishedProcedures}"
                            CommandParameter="{Binding ElementName=MainWindow}"/>


 public string ToDoText
        {
            get { return _toDoText; }
            set
            {
                _toDoText = value;
                RaisePropertyChanged("ToDoText");
            }
        }

我们说我已经绑定了新内容:&#34;你好(60)&#34;。是否可以仅在括号中的文本中更改此示例中的前景?

我计划使用Button.ContentChanged事件,但它不存在。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

在WPF中,您可以嵌套TextBlock并对它们应用不同的样式和绑定。

因此,在ViewModel中,您可以拥有两个单独的属性,每个属性都绑定到具有自己样式的不同private string _message = null; public string Message { get { return _message; } set { if (_message == value) { return; } _message = value; RaisePropertyChanged(() => Message); } } private int _count = 0; public int Count { get { return _count; } set { _count = value; RaisePropertyChanged(() => Count); } }

<Button Grid.Row="0"
        FontSize="22" Grid.Column="7"
        Height="Auto" Foreground="White"
        Style="{StaticResource MaterialDesignToolButton}"
        Command="{Binding ShowUnfinishedProcedures}"
        CommandParameter="{Binding ElementName=MainWindow}">
    <Button.Content>
        <TextBlock><TextBlock Text="{Binding Message}" /> (<TextBlock Text="{Binding Count}" Style="{StaticResource CountTextBlockStyle}" />)</TextBlock>
    </Button.Content>
</Button>

XAML:

brew cask install --force `brew cask list`

答案 1 :(得分:3)

Alex的建议的补充。

在视图模型中创建两个属性,一个用于文本,另一个用于括号内的值。

此处以消息和计数为例。

绑定两个属性,如下所示,以保持简单。

 <Button.Content>
    <TextBlock>
        <Run Text="{Binding Message}"/>(            
        <Run Text="{Binding Count}" Style="{StaticResource SomeStyle}"/>)            
    </TextBlock>
 </Button.Content>

如果需要,您还可以附加一些静态文本。

    <TextBlock>
        <Run Text="StatiContent" Foreground="Blue"/>
        <Run Text="{Binding Message}"/>(            
        <Run Text="{Binding Count}" Style="{StaticResource SomeStyle}"/>)            
    </TextBlock>