0 silverlight xaml binding properties richtextbox
我有以下xaml,
<RichTextBox Name="RichTextBoxPostContent" Margin="0" Padding="8,8,8,0" IsReadOnly="True" Foreground="{x:Null}" Xaml="{Binding Path=PostContent}"/>
Run Code Online (Sandbox Code Playgroud)
和PostContent(一个字符串)有xaml存储为字符串,我不知道如何将它绑定到RichTextBox的Xaml属性,以下是PostContent的值,
<Section xml:space="preserve" HasTrailingParagraphBreakOnPaste="False" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"><Paragraph FontSize="11" FontFamily="Portable User Interface" Foreground="#FF000000" FontWeight="Normal" FontStyle="Normal" FontStretch="Normal" TextAlignment="Left"><Run Text="aaa" /></Paragraph></Section>
Run Code Online (Sandbox Code Playgroud)
如果要使用数据绑定,可以创建自己的附加属性.
下面的代码示例将附加属性添加到名为XamlSource的RichTextBox,您可以使用它来绑定.
public static class RichTextBoxBinder
{
#region RichTextBox attached properties
public static readonly DependencyProperty XamlSourceProperty =
DependencyProperty.RegisterAttached(
"XamlSource",
typeof(string),
typeof(RichTextBox),
new PropertyMetadata(OnXamlSourcePropertyChanged));
private static void OnXamlSourcePropertyChanged(
DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
var rtb = d as RichTextBox;
if (rtb == null) throw new ArgumentException(
"Expected a dependency object of type RichTextBox.", "d");
string xaml = null;
if (e.NewValue != null)
{
xaml = e.NewValue as string;
if (xaml == null) throw new ArgumentException("Expected a value of type string.", "e.NewValue");
}
// Set the xaml and reset selection
rtb.Xaml = xaml ?? string.Empty;
rtb.Selection.Select(rtb.ContentStart, rtb.ContentStart);
}
#endregion
public static void SetXamlSource(this RichTextBox rtb, string xaml)
{
rtb.SetValue(XamlSourceProperty, xaml);
}
public static string GetXamlSource(this RichTextBox rtb)
{
return (string) rtb.GetValue(XamlSourceProperty);
}
}
Run Code Online (Sandbox Code Playgroud)
如果要绑定的属性如下所示:
public string MyRichTextXamlProperty
{
get
{
return
string.Concat(
@"<Section xml:space=""preserve"" HasTrailingParagraphBreakOnPaste=""False""",
@" xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">",
@"<Paragraph FontSize=""11"" FontFamily=""Portable User Interface""",
@" Foreground=""#FF000000"" FontWeight=""Normal"" FontStyle=""Normal""",
@" FontStretch=""Normal"" TextAlignment=""Left""><Run Text=""aaa"" />",
@"</Paragraph></Section>"
);
// Hints: (Thanks Christoph)
// 1) Pay special attention that you include the appropriate XML namespaces
// e.g. 2nd parameter in string.Concat above.
// 2) When you have to use resources, they have to be DynamicResource and
// not StaticResource. This is because your resources are only available
// at runtime.
}
}
Run Code Online (Sandbox Code Playgroud)
然后你的xaml看起来像这样:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyNamespace"
x:Class="MyClass" >
<Grid>
<RichTextBox local:RichTextBoxBinder.XamlSource="{Binding MyRichTextXamlProperty}" />
</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2546 次 |
| 最近记录: |