정말 거친 솔루션으로 해킹하기 전에 누군가 내가 올바른 방향으로 조금 움직일 수 있는지 알 것입니다.WPF RichTextBox - 선택한 텍스트를 사용자 정의 컨트롤로 바꾸기
정말로하고 싶은 것은 사용자가 RichTextBox에서 일부 텍스트를 선택하고 버튼을 클릭 한 다음 해당 텍스트를 사용자 정의 된 렌더링 된 컨트롤로 변환 할 수있게하려는 것입니다. 예를 들어 선택한 텍스트가 포함 된 Button으로 변환합니다.
정말 거친 솔루션으로 해킹하기 전에 누군가 내가 올바른 방향으로 조금 움직일 수 있는지 알 것입니다.WPF RichTextBox - 선택한 텍스트를 사용자 정의 컨트롤로 바꾸기
정말로하고 싶은 것은 사용자가 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에 바인딩 실패했지만 미안 경로를 설정 한 경우 = 선택 : - 그건 당신이 서식있는 텍스트 상자 안에 컨트롤을 얻는 방법 , 그리고 System.Windows.Documents.TextSelection 유형의 내 RelayCommand를 만들고 (내 처리기가 동일한 유형의 매개 변수를 사용하도록) 잘 작동합니다. 내가 무슨 뜻인지 보여주기 위해 위 코드를 업데이트합니다. – kiwipom