本当に原油のソリューションでハッキングを開始する前に、誰かが私に正しい方向に少しでも軽快させることができるかどうかを知りたいと思った。WPF RichTextBox - 選択したテキストをカスタムコントロールに置き換えよう
私が本当にやりたいことは、ユーザーがリッチテキストボックス内のテキストを選択し、ボタンをクリックし、そのテキストをカスタムレンダリングコントロールに変換させることです。たとえば、選択したテキストを含むButtonに変換します。
本当に原油のソリューションでハッキングを開始する前に、誰かが私に正しい方向に少しでも軽快させることができるかどうかを知りたいと思った。WPF RichTextBox - 選択したテキストをカスタムコントロールに置き換えよう
私が本当にやりたいことは、ユーザーがリッチテキストボックス内のテキストを選択し、ボタンをクリックし、そのテキストをカスタムレンダリングコントロールに変換させることです。たとえば、選択したテキストを含むButtonに変換します。
コマンドとCommandParameterでこれを行うことができます
まず、のように、ICommandのにボタンをバインドします。その後、あなたのViewModelまたはコントローラまたはコードビハインドまたはどこに、あなたが公開
<Button Content="Go" Command="{Binding MyCommand}" CommandParameter="{Binding ElementName=myRichTextBox, Path=Selection}" />
<RichTextBox Name="myRichTextBox" />
財産としてのICommand、および方法を指すように...
public ICommand MyCommand
{
get
{
if (_queryCommand == null)
{
_queryCommand = new RelayCommand<TextSelection>(DoWork);
}
return _queryCommand;
}
}
private void DoWork(TextSelection param)
{
string selectedText = param.Text;
// Build your control here...
// probably put it in an ObservableCollection<Control> which is bound by an Items Control, like a ListBox
}
注作業などを行うには:私はジョシュ・スミスの優れたからRelayCommandを使用していましたを使用することもできますが、たとえばRoutedUICommandを同じように使用することもできます(入力ジェスチャをコマンドに関連付けるという特別な利点が追加されます)
選択を受け取り、InlineUIContainerでラップするコードを書く必要がありますリッチテキストボックス内でコントロールを取得する方法は次のとおりです。
<RichTextBox>
<FlowDocument>
<Paragraph>
<Run>Fo</Run>
<InlineUIContainer>
<Button IsEnabled="True">oB</Button>
</InlineUIContainer>
<Run>ar</Run>
</Paragraph>
</FlowDocument>
</RichTextBox>
残念ながら、RTBコントロールのSelection.Pathにバインドできませんでしたが、パス=選択を設定すると私のRelayCommand型System.Windows.Documents.TextSelectionを作成して(同じ型のパラメータを取るようにしてください)、それは正常に動作します。 私が言っていることを示すために上のコードを更新します:) – kiwipom