gpt4 book ai didi

c# - 将 UserControl 中的事件绑定(bind)到父窗口路由事件 - C# XAML

转载 作者:太空宇宙 更新时间:2023-11-03 12:12:50 27 4
gpt4 key购买 nike

我在堆栈面板中有多个相同用户控件的实例,每个用户控件中都有一个按钮。

当我单击此按钮时,我希望它打开一个新窗口,然后禁用包含所有用户控件的堆栈面板,这样就无法同时打开此窗口的多个实例。然后我希望能够在用户关闭新打开的窗口时重新启用堆栈面板。

目前我有这段代码,当我的按钮位于主窗口 XAML 内而不是用户控件的一部分时:

private void ButtonClick(object sender, RoutedEventArgs e)
{
RouteViewer Rv = new RouteViewer((sender as Button).Tag).ToString());
Rv.Owner = this;
Rv.Show();

StackPanel.IsEnabled = false; //Disables the stackpanel
Rv.Closed += new EventHandler(RvClosed);
}

void RvClosed(object sender, EventArgs e)
{
StackPanel.IsEnabled = true; //Re-enables the stackpanel
}

如您所见,问题是由于堆栈面板不属于用户控件。我一直在谷歌搜索并怀疑答案与路由事件有关,我们将不胜感激。

最佳答案

看看这个网站here ,您将要使用事件“冒泡”。

代码可能是这样的:C# 在用户控件中:

private void ButtonClick(object sender, RoutedEventArgs e)
{
RouteViewer Rv = new RouteViewer(((sender as Button).Tag).ToString());
Rv.Show();

var newEventArgs = new RoutedEventArgs(RvOpenedEvent);
RaiseEvent(newEventArgs);
}



public static readonly RoutedEvent RvOpenedEvent = EventManager.RegisterRoutedEvent(
"RvOpened",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(ClassName));

public event RoutedEventHandler RvOpened
{
add { AddHandler(RvOpenedEvent, value); }
remove { RemoveHandler(RvOpenedEvent, value); }
}

然后在主窗口 XMAL 中:

<UserControl:Name RvOpened="RouteViewerOpened"/>

然后在 C# 主窗口中:

private void RouteViewerOpened(object sender, RoutedEventArgs e)
{
ServiceStack.IsEnabled = false;
e.Handled = true;
}

关于c# - 将 UserControl 中的事件绑定(bind)到父窗口路由事件 - C# XAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51251705/

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