嗯,我认为有几种方法。在您的 ViewModel 中创建您需要更改的道具。例如 MessageFontWeight:
FontWeight _fw;
public FontWeight MessageFontWeight
{
get { return _fw; }
set
{
if (_fw != value)
{
_fw = value;
RaisePropertyChanged(() => MessageFontWeight);
}
}
}
在 Xaml 中将其绑定到 TextBlock 的属性:
<TextBlock Text="{Binding Message}" FontWeight="{Binding MessageFontWeight }"/>
那么你可以:
messagewindow.Message = "This is a new message";
messagewindow.MessageFontWeight=FontWeights.Heavy;
dialogService.ShowDialog(Success, messageWindow);
(在VM构造函数中你可能想设置默认值MessageFontWeight = FontWeights.Normal;)
更有趣的方法是将视图中的文本块替换为ContentControl。在您的 VM 中为您的控件创建一个属性:
object _messageControl;
public object MessageControl
{
get { return _messageControl; }
set
{
if (_messageControl!= value)
{
_messageControl = value;
RaisePropertyChanged(() => MessageControl);
}
}
}
在您的 Xaml 中:
<ContentControl Content="{Binding MessageControl}"/>
并传递给 VM 构造函数或按照您喜欢的方式进行控制:
TextBlock message = new TextBlock();
message.Text = "Message Text";
message.FontSize = 27;
message.FontWeight = FontWeights.Bold;
message.Foreground = new SolidColorBrush(Colors.AliceBlue);
messagewindow.MessageControl= message;
dialogService.ShowDialog(Success, messageWindow);
通过这种方法,您可以传递任何复杂的控件——在堆栈面板、网格等中。
编辑
根据您在 cmets 中的问题,您需要在一个 TextBlock 中使用不同的样式。我强烈建议您使用我建议的第二种方式。
您可以执行以下操作:
TextBlock tb1 = new TextBlock();
tb1.TextWrapping = TextWrapping.Wrap;
Run s1 = new Run(string1);
s1.FontWeight = FontWeights.Bold;
Run s2 = new Run(string2);
s2.FontWeight = FontWeights.Normal;
tb1.Inlines.Add(s1);
tb1.Inlines.Add(s2);
messagewindow.MessageControl= tb1;
dialogService.ShowDialog(Success, messageWindow);
我想很好很容易。
如果您只想使用messageWindow.Message = string1 + string2 显示的这种语法,那么您的 viewModel 中应该有两个额外的道具。 String1 和 String2,用RaisePropertyChanged 将它们声明为标准道具。当您将 string1+string2 传递给 Message 时,它们之间应该有一些拆分器 - string1+"^"+string2 + 然后用于您的 Message 道具应该如下所示:
public string Message
{
get {
return _message;
}
set
{
if (_message!= value)
{
_message = value;
string[] str=value.Split('^');
String1=str[0];
String2=str[1];
RaisePropertyChanged("Message");
}
}
}
最后是你的视图的 XAML 代码:
<TextBlock>
<Run Text="{Binding String1}"/>
<Run FontWeight="Bold" Text="{Binding String2}"/>
</TextBlock>