我有一个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
事件,但它不存在。
任何人都可以帮助我吗?
答案 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>