gpt4 book ai didi

c# - 如何将事件从用户控件冒泡到它所在的窗口?

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:33 24 4
gpt4 key购买 nike

我有一个带有搜索栏和搜索按钮的用户控件,我正在窗口中显示这些控件。在按钮上单击我希望事件冒泡到窗口,我可以在窗口后面的代码中做一些事情。我不想把按钮点击代码放在后面的用户控制代码中。我该怎么做?

Window 的 xaml 如下所示:

<dx:DXWindow
x:Class="Client.Support.AskAQuestionDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:libRes="clr-namespace:Shared.Lib.Resources;assembly=Shared.Lib"
xmlns:support="clr-namespace:Client.Support"
xmlns:gui="clr-namespace:Client.GUI;assembly=Client.GUI"
Title="{x:Static libRes:Strings.AskAQuestion}" Loaded="DXWindow_Loaded"
Height="150" Width="700">

<Grid>
<Viewbox>
<support:ZenForumSearchBar VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Viewbox>
</Grid>
</dx:DXWindow>

在 UserControl 的代码中,我有 Click 事件的代码

    private void Button_Click(object sender, RoutedEventArgs e)
{
RaiseEvent(e);
}

在包含用户控件的窗口中,我尝试创建一个处理程序来处理这样的事件

    private void ButtonHandler(object sender, RoutedEventArgs e)
{
FrameworkElement fe = e.Source as FrameworkElement;
switch (fe.Name)
{
case "_knowledgeBaseSearchButton":
break;
}
e.Handled = true;
}

不过我认为我做的每件事都是完全错误的。如何让 UserControl 中发生的事件冒泡到实例化它的窗口?

最佳答案

Button.Click已经是冒泡事件,因此您不需要在 UserControl 中使用 Button_Click。您需要做的就是在 WindowGridViewBox

中附加处理程序
<Grid Button.Click="ButtonHandler">

并在处理程序中检查 e.OriginalSource 而不是 e.Source

var fe = e.OriginalSource as FrameworkElement;

它应该可以工作

关于c# - 如何将事件从用户控件冒泡到它所在的窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23567309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com