我已经创建了一个WPF窗口。我已经为文本框创建了样式,其中包含大小信息以及一些事件设置者;然后,我创建了一些分配上述风格的文本框。
现在有一种情况我需要删除该文本框的事件。但我不能这样做。 即使我做了以下事件,事件也没有脱离。它还在那里。 txt9.PreviewLostKeyboardFocus - = txt9_PreviewLostKeyboardFocus;
仅当事件附加在样式本身中时才会发生这种情况。 如果它在TextBox控件内,则事件分离正常。
我的代码: XAML:
<Window.Resources>
<ResourceDictionary>
<Style x:Key="txtStyle11" TargetType="TextBox">
<Setter Property="Width" Value="150"/>
<Setter Property="Height" Value="35"/>
<EventSetter Event="PreviewLostKeyboardFocus" Handler="txt9_PreviewLostKeyboardFocus"/>
</Style>
</ResourceDictionary>
</Window.Resources>
<Grid MinWidth="50">
<TextBox Style="{StaticResource txtStyle11}" x:Name="txt9"/>
</Grid>
CS:
public MainWindow()
{
txt9.PreviewLostKeyboardFocus -= txt9_PreviewLostKeyboardFocus;
}
答案 0 :(得分:0)
您好我们无法取消订阅在EventSetter中订阅的事件,因为 内部EventSetter类变得不可变,因此属性 无法修改EventSetter对象。以下是我试过的样本 说明一样。当我们尝试更改时,此示例抛出异常 setterbase类的属性
public partial class MainWindow : Window
{
KeyboardFocusChangedEventHandler mydelegate, emptydelegate;
EventSetter eventSetter;
public MainWindow()
{
InitializeComponent();
emptydelegate = delegate(object sender, KeyboardFocusChangedEventArgs e)
{
};
mydelegate = delegate(object sender, KeyboardFocusChangedEventArgs e)
{
MessageBox.Show("My Own Event is still Unsubscribed");
};
eventSetter = new EventSetter();
eventSetter.Event = TextBox.PreviewLostKeyboardFocusEvent;
eventSetter.Handler = mydelegate;
Style myStyle = new System.Windows.Style(txt9.GetType());
myStyle.Setters.Add(eventSetter);
txt9.Style = myStyle;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
eventSetter.Handler= emptydelegate;
}
}