2010-07-20 2 views
2

사용자가 다시 구성 할 수 있도록 메뉴 일부에서 작업 중입니다. 이 메뉴에는 12 개의 요소가있는 격자 (4x3)가 있으며, 모두 NavButton 유형이며 Button을 확장 한 클래스입니다. NavButton에는 단추를 그리드 전체로 이동시킬 수있는 끌기 기능이 있으며 현재는 각 단추가 MouseEnter 이벤트에 있어야하는 위치를 결정하는 중입니다.WPF 사용자 지정 이벤트 만들기

NavButton을 다시 배치해야하는 위치를 결정하기 위해 MouseEnter에서 밝아지는 얇은 직사각형을 배치 했으므로 어떻게 작동해야하는지 생각했습니다. 내 문제는 네비게이션 버튼이 직사각형 위로 드래그 될 때 마우스가 사각형 위에있는 네비게이션 버튼 위에있을 때 MouseEnter 이벤트가 실행되지 않는다는 것입니다. 죄송 합니다만 혼란 스럽지만 아래 코드를 게시하겠습니다.

이 모든 것이 NavButton이 MouseEnter 이벤트의 작동 방식과 비슷한 "Enterters"시점을 결정하는 이벤트를 생성 할 수 있는지 궁금합니다.

C 번호 :

private void rectangle_MouseEnter(object sender, MouseEventArgs e) 
    { 
     foreach (UIElement uie in this.grids[tabNavigation.SelectedIndex].Children) 
     { 
      if (uie.GetType() == typeof(NavButton_UC)) 
      { 
       if ((uie as NavButton_UC).IsDragging) 
       { 
        (sender as Rectangle).Fill = Brushes.Gray; 
       } 
      } 
     } 
    } 

    private void rectangle_MouseLeave(object sender, MouseEventArgs e) 
    { 
     (sender as Rectangle).Fill = Brushes.Black; 
    } 

XAML :

   //The Style is in my ResourceDictionary 
      <Style TargetType="Rectangle"> 
       <Setter Property="Fill" Value="Black" /> 
       <Setter Property="Height" Value="151" /> 
       <Setter Property="Width" Value="10" /> 
       <Setter Property="HorizontalAlignment" Value="Left" /> 
       <Setter Property="Opacity" Value=".6" /> 
       <EventSetter Event="MouseEnter" Handler="rectangle_MouseEnter" /> 
       <EventSetter Event="MouseLeave" Handler="rectangle_MouseLeave" /> 
      </Style> 
      ... 
      <Grid Name="grid" Background="Black"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition></ColumnDefinition> 
        <ColumnDefinition></ColumnDefinition> 
        <ColumnDefinition></ColumnDefinition> 
       </Grid.ColumnDefinitions> 
       <Grid.RowDefinitions> 
        <RowDefinition></RowDefinition> 
        <RowDefinition></RowDefinition> 
        <RowDefinition></RowDefinition> 
        <RowDefinition></RowDefinition> 
        <RowDefinition Height="22"></RowDefinition> 
       </Grid.RowDefinitions> 
       <Rectangle Grid.Row="0" Grid.Column="0" Name="rect00" /> 
       <Rectangle Grid.Row="0" Grid.Column="1" Name="rect01" /> 
       <Rectangle Grid.Row="0" Grid.Column="2" Name="rect02" /> 
       <Rectangle Grid.Row="1" Grid.Column="0" Name="rect10" /> 
       <Rectangle Grid.Row="1" Grid.Column="1" Name="rect11" /> 
       <Rectangle Grid.Row="1" Grid.Column="2" Name="rect12" /> 
       <Rectangle Grid.Row="2" Grid.Column="0" Name="rect20" /> 
       <Rectangle Grid.Row="2" Grid.Column="1" Name="rect21" /> 
       <Rectangle Grid.Row="2" Grid.Column="2" Name="rect22" /> 
       <Rectangle Grid.Row="3" Grid.Column="0" Name="rect30" /> 
       <Rectangle Grid.Row="3" Grid.Column="1" Name="rect31" /> 
       <Rectangle Grid.Row="3" Grid.Column="2" Name="rect32" /> 
       <TextBlock Grid.Row="5" Grid.Column="3" Name="TB" /> 
      </Grid> 

내가 WPF 상당히 새로운 오전, 그래서 어떤 통찰력을 주시면 감사하겠습니다. 고맙습니다.

답변

1

확실히 가능하지만 쉽지 않을 수 있습니다.

조쉬 스미스는 ListView으로이를 구현하는 코드가 포함 된 this article을 게시했습니다. 그는 첨부 된 속성 인 "IsUnderDragCursor"를 만들고 "커서 드래그"아래의 항목이 파란색으로 바뀌는 트리거를 보여줍니다.

분명히 소스를 가져 와서 메뉴 및 NavButton에서 작동하도록 조정해야하지만 원칙은 모두 있습니다.

+0

그 기사 주셔서 감사합니다! 그것은 Drag Events가 어떻게 작동하는지 더 많이 이해할 수있었습니다. –