我的MainPage.xaml中的代码
<TextBox x:Name="TextTextBox"
Text="{Binding Path=Text, Mode=TwoWay}"
TextWrapping="Wrap" />
.
.
.
<!--Button with some Command-->
<Button x:Name="SearchButton"
Content="Search"
HorizontalAlignment="Center"
Command="{Binding Command}"/>
我的ViewModel中的代码(与TextBox绑定的属性)
public string Text
{
get
{
return ssModel.Text;
}
set
{
ssModel.Text = value;
OnPropertyChanged();
}
}
按SearchButton时,正在执行返回int列表的Command(此int是TextBox中着色的索引)。
例如我的文字:
LoremIpsumDolorSitAmet
然后我按SearchButton,Command返回我的三个数字列表{2,5,13}。现在我想在这个位置上着色TextTextBox字符,所以我希望得到类似的东西:
这正是我想要的。在TextTextBox中为指定的possitions着色文本。
我将TextBox更改为RichEditBox并编写DependencyProperty以将控件与View Model中的属性绑定。这是 DependencyProperty :
的类public class RichTextC : DependencyObject
{
public static string GetRichText(DependencyObject obj)
{
return (string)obj.GetValue(RichTextProperty);
}
public static void SetRichText(DependencyObject obj, string value)
{
obj.SetValue(RichTextProperty, value);
}
public static readonly DependencyProperty RichTextProperty =
DependencyProperty.Register("RichText", typeof(string), typeof(RichTextC), new PropertyMetadata(string.Empty, callback));
private static void callback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var reb = (RichEditBox)d;
reb.Document.SetText(TextSetOptions.FormatRtf, (string)e.NewValue);
}
}
MainPage.xaml上的 RichEditBox :
<RichEditBox local:RichTextC.RichText="{Binding MyRichText, Mode=TwoWay}"
Margin="0,30,0,0""/>
但我有另一个问题,因为这个DependencyProperty仅以一种方式绑定。当我在View Model控件中设置属性的文本/内容时,MainPage中的RichEditBox将被通知并显示新文本。但是当我在MainPage中更改RichEditBox的内容时,它不会在View Model中通知属性 - 因此从View到View Model的绑定不起作用。
答案 0 :(得分:1)
TextBox不支持多色文本。如果您想要可编辑的彩色文本,则需要使用RichEditBox。
但是,没有直接的方法来绑定RichEditBox的文本。您可以通过RichEditBox的ITextDocument接口以编程方式设置文本及其字符格式。例如,以下内容将位置2设置为红色。在调用ApplyDisplayUpdates之前,您可以循环遍历整个列表以设置其所有范围:
ITextDocument doc = rtb.Document;
ITextRange range = doc.GetRange(2,3);
range.CharacterFormat.ForegroundColor = Windows.UI.Colors.Red;
rtb.Document.ApplyDisplayUpdates();
另一种可能性是创建一个包含RTF代码的字符串,并使用ITextDocument设置它。SetText。
如果要绑定Text,可以创建一个附加属性,该属性接受RTF并调用SetText或接受您自己的简单标记脚本并调用ITextRange.CharacterFormat.ForegroundColor。无论哪种方式,它都与我在博客条目Binding HTML to a WebView with Attached Properties
中将HTML绑定到WebView的方式相似