残念ながら、TextBlockのInlines
プロパティをバインドすることはできません。あなたのリストボックスが文字列のコレクションにバインドされていることを考えると
public static class TextBlockEx
{
public static readonly DependencyProperty TextProperty =
DependencyProperty.RegisterAttached(
"Text",
typeof(string),
typeof(TextBlockEx),
new PropertyMetadata(null, TextPropertyChanged));
public static string GetText(DependencyObject obj)
{
return (string)obj.GetValue(TextProperty);
}
public static void SetText(DependencyObject obj, string value)
{
obj.SetValue(TextProperty, value);
}
private static void TextPropertyChanged(
DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
var textBlock = obj as TextBlock;
if (textBlock != null)
{
var text = (string)e.NewValue;
textBlock.Inlines.Clear();
// textBlock.Inlines.Add(new Run(text));
// add Runs and Underlines as necessary here
}
}
}
は、あなたがこのようにXAMLでプロパティを使用します。
ただし、直接Inlines
コレクションにアクセスPropertyChangedCallback
で添付プロパティを作成することがあります。
<ListBox ItemsSource="{Binding Strings}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock local:TextBlockEx.Text="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>