Я работаю над частью меню, чтобы он мог быть реорганизован его пользователем. Это меню имеет сетку (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, так что любое понимание будут оценены. Спасибо.
Спасибо за эту статью! Это помогло мне понять намного больше о том, как работают события перетаскивания. –