2013-02-02 3 views
3

드디어 ContentControl에 기반한 "쉬운"투명 버튼 컨트롤을 만들 수있었습니다. 그러나 누군가가 투명하게 자식 요소의 배경을 설정할 때까지 컨트롤의 빈 영역을 클릭하거나 탭할 수없는 이유를 설명 할 수 있습니까?Border/ContentControl 내부의 빈 영역을 탭/클릭 할 수없는 이유는 무엇입니까?

  • 내가 국경
  • 를 사용하려고 나는 버튼이 아닌 ContentTemplate의 ControlTemplate을 설정하면 나는 또한이 문제에 달렸다. (그리드 아이를 가정)를 사용하지만, 그것이 작동 할 때

    public class TransparentButton : ContentControl { 
        public TransparentButton() {    
         HorizontalContentAlignment = HorizontalAlignment.Stretch; 
        } 
    
        public override void OnApplyTemplate() { 
         var child = Content as Grid; 
    
         if (child != null) { 
          child.Background = new SolidColorBrush(Colors.Transparent); 
         } 
    
         base.OnApplyTemplate(); 
        } 
    } 
    

    그것은 나의 경우에 꽤 특정의 :

여기 내 "버튼"클래스입니다. 내가 사용하는 이유는 TiltEffect가 설정된 목록 (비 ListBox) 때문입니다. 문제의

상황은 : 당신이 항목 내부의 StackPanels 사이 클릭하면

<ItemsControl x:Name="Items" toolkit:TiltEffect.IsTiltEnabled="True"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <controls:TransparentButton 
       cal:Message.Attach="[Event Tap] = [Action Go($dataContext)]"> 
       <Grid> 
        <StackPanel HorizontalAlignment="Left"> 
         <TextBlock Text="{Binding Test}" />        
        </StackPanel> 
        <StackPanel HorizontalAlignment="Right"> 
         <TextBlock Text="{Binding Test2}" />        
        </StackPanel> 
       </Grid> 
      </controls:TransparentButton> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

, 어떤 이벤트가 해고하지 않고 아무 반응이 없습니다됩니다. 그리드의 배경이 Transparent 일 때만 "공간을 차지합니다".

웹 배경에서 왔기 때문에 혼란 스럽습니다. 포함 요소는 배경이 설정되어 있지 않아도 "히트 테스트 가능"이어야합니다.

답변

12

배경이없는 개체는 일반적으로 XAML 용어로 hollow 또는 hit-hitable이라고합니다. 따라서 객체가 히트에 반응하도록 배경을 설정해야합니다. 투명 오브젝트에 대한 적중 테스트를 수행하려면 배경을 투명하게 설정해야합니다. 히트 테스트에 대한

더 많은 정보

http://msdn.microsoft.com/en-us/library/ms752097.aspx