2011-03-08 4 views
1

이 내 XAML 코드 :DataTemplate에서 TextBlock을 클릭하는 방법은 무엇입니까?

Error: The name 'author' does not exist in the current context

그러나 나는이 오류의 원인이나 이유를 이해하지 않습니다

<ListBox ItemsSource="{Binding}" Name="listBox"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <StackPanel Width="370"> 
        <TextBlock Text="{Binding AuthorName}" x:Name="author" MouseEventLeftDown="click"/> 
       </StackPanel> 
      </StackPanel>      
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

그리고 클릭 처리기

private void click(object sender, RoutedEventArgs e) 
{ 
    if(author.Text.Equals("Hi")) 
    { 
     // Do Something Special 
    } 
} 

오류는 그것은 일어나고있다.

+0

무엇 * 특히 * 당신이 "작동하지 않습니다"에 의해 의미합니까? –

답변

3

이름으로 귀하의 TextBlock의author 존재하지 않습니다 클릭 처리기의 범위가 DataTemplate이기 때문에 발생합니다. authorTextBlock이 모든 데이터 항목 (예 : 작성자 클래스 또는 특정 종류의 도서 클래스)에 대해 한 번 만들어 지므로 말 그대로 수십 가지 죄책감을 가질 수 있습니다. 트롤은 author입니다.

클릭 핸들러에서 sender을 텍스트 상자로 캐스팅 한 다음 텍스트 속성을 확인하는 것이 좋습니다. 이런 식으로 뭔가 :

private void click(object sender, RoutedEventArgs args) 
{ 
    var textBox = sender as TextBox; 
    if(textBox == null) 
    return; 

    if(textBox.Text.Equals("hi")) 
    { 
    // Do Something Crazy! 
    } 
} 
0

아마도 하이퍼 링크 버튼이나 버튼과 같이 터치 용으로 설계된 UI 요소를 사용하는 것이 좋습니다. 특히 Expression Blend를 사용하는 경우 원하는 방식으로 스타일을 지정할 수 있지만 Touch에 대한 시각적 피드백을 포함시키는 것이 좋습니다.

또한 - 귀하의 == 코드에 대해 확실하지 않습니다. 송신자 (UI 요소)를 일부 문자열 표현식과 비교하고 있습니까?

0

먼저 TextBlock이 DataTemplate에 정의되어 있습니다. TextBlock에서 Name 대신 x:Name을 시도하십시오.

두 번째로 TextBlock에서 정확한 픽셀을 눌러야하기 때문에 TextBlock을 클릭하는 것이 매우 어려울 수 있습니다. TextBlock을 쉽게 클릭 할 수 있도록 TextBlockBackground을 입력 할 수 있으므로 클릭하기가 훨씬 쉽습니다. 당신은 투명 배경 만들 수 있습니다. "탭"또는 더블 "또는 무엇이든 같은 이벤트 핸들러를 생성하기위한

Background="Transparent" 
0

는 제스처 리스너를 사용을

0

사용이 ...

private void click(object sender, RoutedEventArgs e) 
    { 
     var author = (TextBlock)sender; 

     if (author.Text.Equals("Hi")) 
     { 
      // Do Something Special  
     } 
    } 
관련 문제