2010-04-14 5 views
3

사용자 지정 컨트롤 만들기 일부 기본 키 바인딩을 추가해야하는데, Microsoft는 이미 텍스트 상자에 복사하여 붙여 넣기를 수행했습니다. 그러나 키 바인드 중 하나는 바인드 된 명령에 매개 변수를 전달해야합니다. xaml에서이 작업을 수행하는 것이 간단합니다. 코드에서이 작업을 수행 할 수있는 방법이 있습니까? 매개 변수를 엄격하게 전달되지 않도록코드에서 수행 한 키 바인딩을 통해 매개 변수를 명령에 전달할 수 있습니까?

this.InputBindings.Add(new KeyBinding(ChangeToRepositoryCommand, new KeyGesture(Key.F1))); 

답변

4

(더 좋은 방법을 알고 싶어요) : 나는 사과

InputBindings.Add(new KeyBinding(ChangeToRepositoryCommand, new KeyGesture(Key.F1)) { CommandParameter = 0 }); 

을 내 질문이 불분명합니다.

+1

당신의 솔루션은 다음과 같이 훨씬 더 읽기 쉽습니다 :'InputBindings.Add (새로운 KeyBinding (ChangeToRepositoryCommand, 새로운 KeyGesture (Key.F1)) {CommandParameter = 0}); ' –

+0

고맙습니다. 업데이트 됨. – Justin

1

복사 및 붙여 넣기 명령은 텍스트 상자에 의해 처리됩니다,하지만 난 당신이에 받고있는 것을 알고있다.

내가 할이 해킹 사용 - XAML

다음 때 매개 변수 선택한 항목을 만드는

<ListBox local:AttachableParameter.Parameter="{Binding RelativeSource={RelativeSource Self}, Path=SelectedItems}" /> 

에서 다음 그래서

public class AttachableParameter : DependencyObject { 

     public static Object GetParameter(DependencyObject obj) { 
     return (Object)obj.GetValue(ParameterProperty); 
     } 

     public static void SetParameter(DependencyObject obj, Object value) { 
     obj.SetValue(ParameterProperty, value); 
     } 

     // Using a DependencyProperty as the backing store for Parameter. This enables animation, styling, binding, etc... 
     public static readonly DependencyProperty ParameterProperty = 
      DependencyProperty.RegisterAttached("Parameter", typeof(Object), typeof(AttachableParameter), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits)); 
} 

같은과 연결된 속성을 명령은 창에서 명령을 실행합니다. 명령 매개 변수가 있는지 확인하기 위해이 명령을 사용합니다 (이 코드는 실행 및 실행에서 호출합니다)

private Object GetCommandParameter() { 
    Object parameter = null; 
    UIElement element = FocusManager.GetFocusedElement(this) as UIElement; 
    if (element != null) { 
     parameter = AttachableParameter.GetParameter(element as DependencyObject); 
    } 
    return parameter; 
    } 

해킹이지만 키 바인딩에서 시작된 바인딩에 명령 매개 변수를 가져 오는 다른 방법을 찾지 못했습니다. 내가 대답을 발견

+0

내가 함께 XAML에서 무엇을해야하기 때문에 쉽게 : <키 바인딩 명령 = "{바인딩 ChangeRepositoryCommand}"제스처 = "Ctrl 키 + 1"CommandParameter = "0"/> 그들이하지 않는 이유가 궁금 당신은 코드에서 그렇게합니다. – Justin