all。私はContentControlをHTML構文の文字列を返すプロパティにバインドされているプロジェクト内に持っています。Silverlight-選択可能なテキストのコンテンツコントローラを作成する方法
コントロールのXAML
<ContentControl Height="48"
Margin="100,56,223,0"
VerticalAlignment="Top"
Content="{Binding HitContext,
Converter={StaticResource FormatConverter},
Mode=TwoWay}"
Foreground="White" />
あなたは、私がこのコントロールに変換特性を持っていることに気づくでしょう。本質的には、返された文字列を評価し、htmlを取り除いてxamlに置き換えて、戻り値内のキーワードを強調表示します。ここで
は、フォーマット変換コードです:
public class HighlightConverter : IValueConverter
{
///<summary>
///Converter class used to evaluate and highlight context string results
///</summary>
///
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string str = value.ToString();
str = str.Replace("&", "&");
str = str.Replace("<fragment>", " ");
str = str.Replace("</fragment>", " ");
str = str.Replace("<hilight>", "<Run Foreground=\"Gold\" FontWeight=\"ExtraBold\" FontSize=\"13\">");
str = str.Replace("</hilight>", "</Run>");
return XamlReader.Load("<TextBlock xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" TextWrapping=\"Wrap\" >" + str + "</TextBlock>");
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
今のところ、これが正常に動作します。文字列はビューでレンダリングされ、タグ "hilight"を持つ単語は、xaml構文としてコントロール内の強調表示された単語をレンダリングするために変換されます。また、フラグメントタグやアンパサンドの削除など、他のクリーンアップを参照することもできます。
私が問題になっているのは、実行時にコントロールからテキストを選択できる必要があるということです。 UIからテキストを選択する必要がある場合、TextBoxは通常使用されますが、UIelementにハイライトの書式設定を渡すことはできません。私もRichTextBoxを使用しようとしましたが、コントロールを作成できないことを示すxaml構文解析エラーを受け取りました。
私はstackoverflowとsilvelright.netに1つのリンクを見ましたが、ユーザーがテキストブロックにスタイルを適用するよう提案した同様の問題がありました。ただし、これはContentControl内でレンダリングされているため、スタイルを設定できませんでした。
これまでは、ViewScroller、Textbox、およびRichTextBoxを使ってみましたが、レンダリング時に解析エラーが原因ですべてが失敗しました。
私はテキストを強調表示しているので、これを実行することが可能かどうかも分かりませんし、選択する必要もあります。私はどんな提案やアイデアも歓迎する。
ありがとう、
あなたの入力「HTML」の小さなサンプル(これは本当にhtmlではありませんか?)が役に立ちます。 – AnthonyWJones