我正在处理菜单的一部分,以允许其用户对其进行重新组织。这个菜单有一个包含12个元素的grid(4x3),所有元素都是NavButton类型,这是我创建的扩展Button的类。在NavButton中,我具有拖动功能,该功能允许将按钮在整个网格中移动,目前我正在确定每个按钮应在MouseEnter事件上的位置。

为了确定NavButtons应该在何处重新放置,我放置了细矩形,这些矩形会在MouseEnter上变亮,或者因此,我认为那应该是它们的工作方式。我的问题是,当将NavButton拖动到矩形上方时,由于鼠标在矩形上方的NavButton上方,因此MouseEnter事件将不会触发。抱歉,这听起来令人困惑,但是我将在下面发布代码。

综上所述,我想知道是否有可能创建一个事件来确定NavButton何时“进入”矩形,这与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还是很陌生,所以任何见解都将不胜感激。谢谢。

最佳答案

绝对有可能,但可能并不容易。

乔什·史密斯(Josh Smith)发布了this article,其中包括使用ListView实现该代码的代码。他创建了一个附加属性“ IsUnderDragCursor”,并显示了一个触发器,其中“拖动光标”下的项目变为蓝色。

显然,您必须获取源代码并对其进行调整,以使其与菜单和NavButtons一起使用,但是原理就在那里。

关于c# - WPF创建自定义事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3295048/

10-08 22:46