2013-04-04 2 views
0

Попытка получить выделенный текст в средстве просмотра потока к команде в качестве параметраWPF Получить текущий выбор в FlowDocumentScrollViewer в CommandParameter

<FlowDocumentScrollViewer Name="_OutputBox"> 
    <FlowDocument> 
     <FlowDocument.ContextMenu > 
      <ContextMenu> 
       <MenuItem Header="New" 
        Command="{Binding AddDefaultTriggerCommand}" 
        CommandParameter="{Binding ElementName=_OutputBox, Path=Selection}"> 
       </MenuItem> 
      </ContextMenu> 
     </FlowDocument.ContextMenu> 
    </FlowDocument> 
</FlowDocumentScrollViewer> 

В классе модели:

private RelayCommand<System.Windows.Documents.TextSelection> _AddDefaultTriggerCommand; 

public ICommand AddDefaultTriggerCommand 
{ 
    get 
    { 
     ... 
     this._AddDefaultTriggerCommand = new RelayCommand<TextSelection>(
        AddDefaultTriggerCommandExecuted,...) 
     ... 
    } 
} 

Проблема заключается в том, что в параметр передается в обработчик всегда пустой:

private void AddDefaultTriggerCommandExecuted(System.Windows.Documents.TextSelection parameter)... 

Я что-то упустил? Как стандартная команда Windows Copy получает выделенный текст?

ответ

1

Да, потому что вы не прошли параметр. Добавьте лямбда-выражение, и оно должно работать:

this._AddDefaultTriggerCommand = new RelayCommand<TextSelection>(
       param => AddDefaultTriggerCommandExecuted(param)) 
+0

no ... it is still null. – Califf

+0

еще одна вещь, которую я случайно встретил, что мне пришлось добавить эту строку в Window ctor, чтобы получить контекст справа: // Требуется для использования привязки ElementName в контекстном меню NameScope.SetNameScope (MainWndContextMenu, NameScope. GetNameScope (это)); в сочетании, он отлично работал, спасибо! – Califf