2010-07-20 3 views
2

Я работаю над частью меню, чтобы он мог быть реорганизован его пользователем. Это меню имеет сетку (4x3) с 12 элементами, все из которых имеют тип NavButton, класс I, который расширяет Button. В NavButton у меня есть функция перетаскивания, которая позволяет перемещать кнопки по всей сетке, и в настоящее время я работаю над определением, где каждая кнопка должна приземлиться на событие MouseEnter.WPF Создание пользовательских событий

Чтобы определить, где NavButtons следует переместить, я разместил тонкие прямоугольники, которые будут ярче на MouseEnter, или так я думал, что так они должны работать. Моя проблема заключается в том, что, когда NavButton перетаскивается по прямоугольникам, событие MouseEnter не срабатывает, так как мышь находится над NavButton, которая находится над прямоугольником. Извините, если это звучит запутанно, но я отправлю код ниже.

Все, что было сказано, мне интересно, возможно ли вообще создать событие, чтобы определить, когда NavButton «Входит» в Rectangle, подобно тому, как работает событие MouseEnter?

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

Это определенно возможно, но это может быть нелегко.

Josh Smith опубликовано this article, которое включает в себя код для его использования с ListView. Он создал прикрепленное свойство «IsUnderDragCursor» и показывает триггер, где элемент под «курсором перетаскивания» становится синим.

Очевидно, что вам нужно будет взять источник и адаптировать его для работы с вашим меню и NavButtons, но принципы все там.

+0

Спасибо за эту статью! Это помогло мне понять намного больше о том, как работают события перетаскивания. –

Смежные вопросы