Я работаю над WPF-приложением. В этом приложении у меня есть некоторые сегменты XAML. Мне нужно отобразить сегменты XAML в TextBlock
. В моем XAML, у меня есть следующие строки:WPF - рендеринг сегмента Xaml
<TextBlock Text="{Binding Path=XamlSegment, Converter={StaticResource XamlToTextConverter}}" />
Свойство XamlSegment
будет иметь значение как "-0.275 * x2". В попытке сделать этот XAML в моем пользовательском интерфейсе, так что Надстрочные показывает, я использую XamlToTextConverter
, который определяется следующим образом:
namespace MyApp.Converters
{
public class XamlToTextConverter : IValueConverter
{
private static readonly Regex Regex = new Regex("(<.*?)>(.*)(</.*?>)", RegexOptions.Compiled);
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
// value looks like this: -0.275*x<Run Typography.Variants="Superscript">2</Run>
var xamlText = value as string;
if (xamlText != null)
{
try
{
xamlText = "<TextBlock>" + xamlText + "</TextBlock>";
var xamlTextWithNamespace = Regex.Replace(xamlText, "$1 xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">$2$3");
return XamlReader.Parse(xamlTextWithNamespace);
}
catch (Exception)
{
return value;
}
}
else
{
return value;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
Когда преобразователь получает побежал мой интерфейс показывает «System.Windows. Controls.TextBlock "вместо отображаемого XAML. Но я не знаю, почему. Как мне получить мой XamlSegment
для визуализации в моем интерфейсе?
Благодаря
Согласно [этой ссылке] (https://msdn.microsoft.com/en-us/library/cc663033 (v = vs.110) .aspx), метод XamlReader.Parse должен возвращать 'TextBlock' объект. – Colin
@Colin 'XamlReader.Parse' возвращает объект TextBlock. Однако в самом пользовательском интерфейсе его притяжение «System.Windows.Controls.TextBlock» вместо фактического отображения TextBlock. Я не понимаю, почему и как это исправить. – user70192