C# WPF图像&x27;未激发s gotfocus/lostfocus事件
你们能帮我一下吗,为什么当我点击图片然后点击文本框时,GotFocus和LostFocusa事件并没有触发 我的XAML:C# WPF图像&x27;未激发s gotfocus/lostfocus事件,c#,wpf,events,C#,Wpf,Events,你们能帮我一下吗,为什么当我点击图片然后点击文本框时,GotFocus和LostFocusa事件并没有触发 我的XAML: <Window x:Class="imageclick.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<Window x:Class="imageclick.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<Image Source="Untitled.png" GotFocus="GF" LostFocus="LF" Focusable="True"></Image>
<TextBox ></TextBox>
</StackPanel>
</Grid>
</Window>
我不明白为什么GotFocus/LostFocus事件从未触发
提前谢谢
更新:当我设置tabindex时,当tab到达触发的图像事件时,但我无法用鼠标单击到达图像时,图像不是一个。只有控件可以获得焦点。使用MouseEnter和MouseLeave事件代替GotFocus和LostFocus
<StackPanel>
<Image Stretch="Uniform" Source="Untitled.png" Height="410" MouseEnter="Image_MouseEnter" MouseLeave="Image_MouseLeave"></Image>
<TextBox Height="65"></TextBox>
</StackPanel>
根据,UIElement.GotFocus事件在该元素获得逻辑焦点时发生
逻辑焦点与键盘焦点不同,当路由中元素的IsFocused
属性的值从false更改为true时,逻辑焦点会升高
因此,为了通过鼠标点击实现这一点,需要处理相应的鼠标按钮事件,或者只需处理MouseDown
并将焦点设置为发送者
private void Image_MouseDown(object sender, MouseButtonEventArgs e)
{
if (sender is Image)
{
(sender as Image).Focus();
}
}
这会将图像的
IsFocused
属性设置为true
我猜图像根本无法聚焦。您可能需要将Image标记包装在一个“focusable”元素中。我发现如下:Image类不是真正的控件类,因为它不是控件的子类。不能对图像元素调用焦点,也不能将图像元素放置在选项卡序列中。我可以使用哪种元素来包装图像?谢谢,但我想以某种方式确定图像是否被选中。例如,如果选择了图像外部的边框,这是一个坏主意,因为有多种方法可以改变焦点。如果按tab键切换到其他控件等,则必须捕获所有这些场景,以便正确实现gotfocus/lostfocus。由于图像
行为在这里有点奇怪,这是一个丑陋的破解,以实现理想的输出。除了处理GotFocus
和LostFocus
,如果我们处理MouseDown
;工作正常。我相信,有很多其他的方法可以达到同样的效果,但这也是可行的。