2017-05-18 26 views
1

ItemTemplate에 대해 DataTemplate을 사용하는 목록 상자 (Silverlight)가 있습니다. DataTemplate을은 다음과 같이 정의된다 : 내 이벤트 RoleStackPanel_MouseLeftButtonUp은 화재 TextBlock의 표시 텍스트를 클릭하면 것을 발견했다XAML : MouseLeftButtonUp는 공백이 아닌 텍스트를 클릭 할 때만 실행됩니다.

<DataTemplate> 
    <StackPanel Orientation="Horizontal" 
       MouseLeftButtonUp="RoleStackPanel_MouseLeftButtonUp" 
       Tag="{Binding}"> 
     <TextBlock Name="roleItem" 
        Text="{Binding Path=DisplayValue, Mode=TwoWay}"/> 
    </StackPanel> 
</DataTemplate> 

. 사용자가 텍스트 오른쪽의 항목에서 공백을 클릭하면 이벤트가 발생하지 않습니다. 따라서 컨트롤의 너비가 300px라고 가정 해 보겠습니다. 항목에 'Admin'이라는 단어가있는 경우 오른쪽의 빈 공백이 아닌 'Admin'을 클릭해야합니다.

항목을 클릭하거나 텍스트 또는 공백이있는 곳에서 이벤트가 시작되도록하려면 어떻게해야합니까?

답변

2

몇 가지 빠른 고려 사항을 통해 정렬 할 수 있습니다.

) 패널의 영역에는 기본적으로 HitTestVisibility가 없습니다. 이는 의도적으로 설계된 것입니다. 부모를 위해 이벤트를 실행하려면 IsHitTestVisible="True" 속성을 추가하거나 Background="Transparent"을 통해 패널에 Brush을 제공하여 HitTestVisibility를 호출하십시오.

b.) StackPanel은 자식이 필요로하는 공간 만 사용합니다. 사용자가 스왑하는 것보다 큰 영역을 제공하려는 경우 StackPanelGrid이며 부모가 사용할 수있는 공간을 모두 사용해야합니다. HitTestVisibility와 동일한 규칙이 적용됩니다.

<DataTemplate> 
    <Grid IsHitTestVisible="True" 
      MouseLeftButtonUp="RoleStackPanel_MouseLeftButtonUp" 
      Tag="{Binding}"> 
     <TextBlock Name="roleItem" 
        Text="{Binding Path=DisplayValue, Mode=TwoWay}" /> 
    </Grid> 
</DataTemplate> 

희망이 있으시면 건배!

+0

그게 전부 였어! 도와 줘서 고마워. 거대한 시간 절약! – Walter