小编mot*_*zzt的帖子

WPF - 声明自定义路由事件并收听它

简而言之:我想声明一个自定义路由事件,同时从声明它的同一个用户控件中监听它.

我想要实现的是拥有一个为某个任务提供请求的用户控件,所以我想到了这个场景:

  • 用户控件类声明自定义路由事件
  • 用户控件类通过AddHandler(...)监听自己的自定义路由事件

然后:

  • 可视化树中的一些随机项使用RaiseEvent(...)来...嗯,举起事件.
  • 树中的用户控件的实例服务于请求.

它似乎不起作用.它与用户控件声明并引发事件的通常情况有点不同,我知道,所以我做了一些测试.


如何创建自定义路由事件似乎很清楚,这不是我第一次这样做.我创建了一个示例用户控件,这是它背后的代码:

    public partial class FuffaControl : UserControl
    {
        public static readonly RoutedEvent FuffaEvent = EventManager.RegisterRoutedEvent("Fuffa", RoutingStrategy.Bubble, typeof(FuffaEventHandler), typeof(FuffaControl));
        // Provide CLR accessors for the event
        public event FuffaEventHandler Fuffa
        {
            add { AddHandler(FuffaEvent, value); }
            remove { RemoveHandler(FuffaEvent, value); }
        }

        public FuffaControl()
        {
            InitializeComponent();
        }
    }
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.然后,出于测试目的,我已经声明了一个带有自定义控件的窗口和一个按钮.这是窗口的内容:

    <Grid>
            <local:FuffaControl>
                    <Grid>
                            <Button Content="Fuffa" HorizontalAlignment="Center" VerticalAlignment="Center" Click="Button_Click"/>
                    </Grid>
            </local:FuffaControl>
    </Grid>
Run Code Online (Sandbox Code Playgroud)

在后面的代码中,我使用AddHandler来监听事件,并在点击按钮时引发事件:

    public MainWindow()
    {
        InitializeComponent();

        this.AddHandler(FuffaControl.FuffaEvent, new FuffaEventHandler(OnFuffaEvent));
    }

    private void Button_Click(object sender, …
Run Code Online (Sandbox Code Playgroud)

c# wpf events

7
推荐指数
1
解决办法
3500
查看次数

使用新处理程序的 WPF RemoveHandler

我在很多答案中都看到过这个,但我不知道它是如何工作的。

通常是这样的(伪代码):

UIElement.AddHandler(routedEvent, new EventHandler(handler));
Run Code Online (Sandbox Code Playgroud)

这基本上似乎创建了委托的新实例并传递它,以便将其添加到委托列表中。到目前为止,一切都很好。

但是,要删除它,您需要执行以下操作:

UIElement.RemoveHandler(routedEvent, new EventHandler(handler));
Run Code Online (Sandbox Code Playgroud)

似乎只是删除了一个新实例,而不是前一个实例。

这里发生了什么?

wpf event-handling

6
推荐指数
1
解决办法
1926
查看次数

actionbar setnavigationmode已弃用

嗨,我正在制作一个应用程序,我计划在商场内展示商店的地板和类别明智商品列表.

下面的快照显示了一个显示商店明智地列表的活动 在此输入图像描述

我想在ActionBar中添加一个微调器,显示"by Floor"和"by Category"作为选项.点击"按类别"将根据商店所属的类别来安排商店.谷歌搜索后我找到了一点

getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
Run Code Online (Sandbox Code Playgroud)

会很贴切,但现在我看到它被弃用,把它作为活动菜单中的一个动作项目看起来不是一个好主意.有什么建议 ?

android android-menu android-spinner android-actionbar

4
推荐指数
1
解决办法
1万
查看次数