简而言之:我想声明一个自定义路由事件,同时从声明它的同一个用户控件中监听它.
我想要实现的是拥有一个为某个任务提供请求的用户控件,所以我想到了这个场景:
然后:
它似乎不起作用.它与用户控件声明并引发事件的通常情况有点不同,我知道,所以我做了一些测试.
如何创建自定义路由事件似乎很清楚,这不是我第一次这样做.我创建了一个示例用户控件,这是它背后的代码:
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) 我在很多答案中都看到过这个,但我不知道它是如何工作的。
通常是这样的(伪代码):
UIElement.AddHandler(routedEvent, new EventHandler(handler));
Run Code Online (Sandbox Code Playgroud)
这基本上似乎创建了委托的新实例并传递它,以便将其添加到委托列表中。到目前为止,一切都很好。
但是,要删除它,您需要执行以下操作:
UIElement.RemoveHandler(routedEvent, new EventHandler(handler));
Run Code Online (Sandbox Code Playgroud)
这似乎只是删除了一个新实例,而不是前一个实例。
这里发生了什么?
嗨,我正在制作一个应用程序,我计划在商场内展示商店的地板和类别明智商品列表.
下面的快照显示了一个显示商店明智地列表的活动
我想在ActionBar中添加一个微调器,显示"by Floor"和"by Category"作为选项.点击"按类别"将根据商店所属的类别来安排商店.谷歌搜索后我找到了一点
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
Run Code Online (Sandbox Code Playgroud)
会很贴切,但现在我看到它被弃用,把它作为活动菜单中的一个动作项目看起来不是一个好主意.有什么建议 ?