gpt4 book ai didi

c# - wpf 附加属性 : where to unsubscribe from event handling?

转载 作者:行者123 更新时间:2023-12-04 14:23:40 27 4
gpt4 key购买 nike

我有一个依赖属性 (bool),它可以在文本框中启用行为。
属性更改回调订阅了一些事件处理程序:

static void MyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is TextBox && e.NewValue != null)
{
var tb = d as TextBox;

if ((bool)e.NewValue)
{
tb.Loaded += TextBox_OnLoaded;
tb.MouseLeftButtonDown += TextBox_OnMouseLeftButtonDown;
}
else
{
tb.Loaded -= TextBox_OnLoaded;
tb.MouseLeftButtonDown -= TextBox_OnMouseLeftButtonDown;
}
}
}

在我的 Xaml 中,我有:
<TextBox
customdp:MyTextBoxBehavior.EnableBehavior="True">
</TextBox>

离开这个,行为工作正常。但是退订永远不会被执行!
所以我必须放在哪里:
customdp:MyTextBoxBehavior.EnableBehavior="False"

???

这是另一个案例:
2)我有一个 ListView 并在 OnLoaded() 内订阅了可视化树中子项的事件。原因:我不想为每个 listviewitem 添加附加属性。
static void ListView_OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
var lv = sender as ListView;
if (lv != null)
{
foreach (TextBox tb in lv.Items)
{
tb.LostFocus += TextBox_OnLostFocus;
}
}
}

想法:取消订阅:
ListView_OnUnLoaded(..)
{
// Items already empty
}

...在哪里退订?

最佳答案

在你能做的那一刻tb.Loaded +=您还可以访问 tb.Unloaded .利用这个机会添加您的清理代码,这将取消订阅 Loaded事件——还有 Unloaded事件。

关于c# - wpf 附加属性 : where to unsubscribe from event handling?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17313375/

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