2010-05-27 4 views
0

표준 WPF 목록 상자를 동적으로 채우려 고하고 목록 상자의 각 항목에 대해 클릭 할 때 명령을 시작하려고합니다. 현재 채울 수있는 작업 목록 상자가 있으며 각 항목은 올바른 명령을 실행하지만 명령을 실행하려면 목록 항목을 두 번 클릭해야합니다. 즉, 한 번 클릭하여 항목을 선택한 다음 실제 텍스트를 클릭하여 명령을 실행합니다.명령을 실행하기 위해 WPF 목록 상자 항목을 두 번 클릭해야하는 이유는 무엇입니까?

기본적으로
<ListBox.ItemTemplate> 
     <DataTemplate> 
     <TextBlock Margin="4,2,4,2"> 
      <Hyperlink TextDecorations="None" Command="MyCommands:CommandsRegistry.OpenPanel"> 
      <TextBlock Text="{Binding}" Margin="4,2,4,2"/> 
      </Hyperlink> 
     </TextBlock> 
     </DataTemplate> 
</ListBox.ItemTemplate> 

, 어떻게 두 번 클릭 할 필요를 제거합니까 : 목록으로

가 동적으로 생성되고, 나는 목록 항목에 대한 데이터 템플릿을 생성했다? 목록 상자 항목을 선택하면 이벤트 트리거를 사용하여 하이퍼 링크 요소의 click 이벤트를 발생 시키려고 시도했지만 작동하도록 설정할 수는 없습니다. 또는 목록 상자를 동적으로 채우고 각 목록 항목에 명령을 첨부하는 더 나은 방법이 있습니까?

감사합니다.

답변

1

분명히 하이퍼 링크 텍스트를 클릭하고 있습니까? 코드를 실행하는 데 어려움이 없었으며 링크의 첫 번째 클릭이 저에게 효과적이었습니다.

업데이트 : 당신의리스트 박스는 문자열 목록에 바인딩되어 있기 때문에 (당신의 실행 방법 다음

<Hyperlink TextDecorations="None" Command="my:CommandsRegistry.OpenPanel" CommandParameter="{Binding}"> 

: 명령을 클릭 한 목록 항목 알아야 할 필요가있는 경우, 당신은 항상 CommandParameter를 추가 할 수) :

public void Execute(object parameter) 
{ 
    MessageBox.Show("You clicked on " + parameter.ToString()); 
} 

업데이트 2 : 자동으로 당신이 당신의 CommandParameter로 ListBoxItem의를 통과 할 수있는 항목을 선택합니다

,369
<Hyperlink TextDecorations="None" Command="my:CommandsRegistry.OpenPanel" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}"> 

다음이 명령에서 선택 :

public void Execute(object parameter) 
{ 
    ListBoxItem itemClicked = (ListBoxItem)parameter; 
    itemClicked.IsSelected = true; 
    MessageBox.Show("You clicked on " + parameter.ToString()); 
} 
+0

예, 당신 말이 맞아, 명령은 하이퍼 링크 텍스트를 클릭 불을 수행하지만 아무것도하지의 모양을 제공합니다. Execute 메서드 명령은 작업을 수행하기 위해 선택한 목록 항목이 필요하지만 하이퍼 링크 텍스트 만 누르면 목록 항목이 선택되지 않으므로 작업을 수행 할 수 없습니다. 따라서 목록 항목 IsSelected 속성을 변경하는 하이퍼 링크의 데이터 트리거가 작동합니까? 하이퍼 링크 요소가 목록 항목의 하위 항목 인 것은 문제입니까? 감사합니다. – Donal

+0

@ 도날뇽, 아이템을 선택하지 않았지만 답변을 가능한 한 업데이트했습니다. –

+0

좋아요! 고마워, 코드가 작동했습니다. 웬일인지 나는 방금 CommandParameter를 사용하지 않았다. 조상 찾기 바인딩은 정말 유용합니다. – Donal

관련 문제