我有一个依赖属性(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
}
......在哪里取消订阅?