- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个WPF应用程序,其中有一个TextBox
和ListBox
。受this SO thread的启发,我实现了一个Behavior,可以通过按下Down键将焦点从TextBox
移到ListBox
。但是,的问题是,它只发生一次,即OnIsFocusedChanged
仅触发一次。谁能告诉我我在想什么或做错了什么?
查看:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:InteractivityTest"
xmlns:beh="clr-namespace:InteractivityTest.Behaviors"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
<DataTemplate DataType="{x:Type local:AutoCopmleteTextBoxViewModel}">
<Grid Name="grMain">
<TextBox Name="myTextBox"
Text="{Binding MyText}"
Width="150">
<i:Interaction.Behaviors>
<beh:FocusBehavior IsFocused="{Binding TextBoxHasFocus}" />
</i:Interaction.Behaviors>
<TextBox.InputBindings>
<KeyBinding Key="Down"
Command="{Binding SetFocusToListBoxCommand}" />
</TextBox.InputBindings>
</TextBox>
<Popup Name="puSuggestions"
Placement="Bottom"
Width="{Binding ElementName=myTextBox, Path=ActualWidth}"
MinWidth="0"
PlacementTarget="{Binding ElementName=myTextBox}"
IsOpen="True">
<Border Background="White"
BorderBrush="Gray"
BorderThickness="1"
CornerRadius="1">
<ListBox Name="lbSuggestions"
ItemsSource="{Binding SuggestionCol}"
BorderThickness="0"
Background="White">
<i:Interaction.Behaviors>
<beh:FocusBehavior IsFocused="{Binding ListBoxHasFocus}" />
</i:Interaction.Behaviors>
</ListBox>
</Border>
</Popup>
</Grid>
</DataTemplate>
</ResourceDictionary>
Imports System.ComponentModel
Public Class AutoCopmleteTextBoxViewModel
Implements INotifyPropertyChanged
Private _SuggestionCol As List(Of String)
Private _ListBoxHasFocus As Boolean
Private _TextBoxHasFocus As Boolean
Public Property SuggestionCol As List(Of String)
Get
Return New List(Of String) From {"A", "AB", "ABC", "ABCD"}
End Get
Set
_SuggestionCol = Value
NotifyPropertyChanged(NameOf(SuggestionCol))
End Set
End Property
Public Property ListBoxHasFocus As Boolean
Get
Return _ListBoxHasFocus
End Get
Set
_ListBoxHasFocus = Value
NotifyPropertyChanged(NameOf(ListBoxHasFocus))
End Set
End Property
Public Property TextBoxHasFocus As Boolean
Get
Return _TextBoxHasFocus
End Get
Set
_TextBoxHasFocus = Value
NotifyPropertyChanged(NameOf(TextBoxHasFocus))
End Set
End Property
Public Property SetFocusToListBoxCommand As ICommand
Sub New()
SetFocusToListBoxCommand = New Command(AddressOf Me.OnKeyDownOnTextBox, Nothing)
End Sub
Private Sub OnKeyDownOnTextBox(parameter As Object)
ListBoxHasFocus = True
TextBoxHasFocus = False
End Sub
#Region "Property Changed"
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Protected Sub NotifyPropertyChanged(info As [String])
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
End Sub
#End Region
End Class
Imports System.Windows.Interactivity
Namespace Behaviors
Public Class FocusBehavior
Inherits Behavior(Of Control)
Public Property IsFocused As Boolean
Get
Return CBool(GetValue(IsFocusedProperty))
End Get
Set(ByVal value As Boolean)
SetValue(IsFocusedProperty, value)
End Set
End Property
Public Shared ReadOnly IsFocusedProperty As DependencyProperty =
DependencyProperty.Register(NameOf(IsFocused), GetType(Boolean),
GetType(FocusBehavior),
New PropertyMetadata(New PropertyChangedCallback(Sub(d, e)
OnIsFocusedChanged(d, e)
End Sub)))
Private Shared Sub OnIsFocusedChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
If CBool(e.NewValue) Then
CType(d, FocusBehavior).GotFocus()
End If
End Sub
Private Sub GotFocus()
Me.AssociatedObject.Focus()
Keyboard.Focus(Me.AssociatedObject)
If TypeOf Me.AssociatedObject Is TextBox Then
Dim tmpTextBox = TryCast(Me.AssociatedObject, TextBox)
tmpTextBox.CaretIndex = tmpTextBox.Text.Length
ElseIf TypeOf Me.AssociatedObject Is ListBox Then
Dim tmpListBox = TryCast(Me.AssociatedObject, ListBox)
If Not tmpListBox.Items.Count = 0 Then
tmpListBox.SelectedItem = tmpListBox.Items(0)
Dim tmpListBoxItem = TryCast(tmpListBox.ItemContainerGenerator.ContainerFromItem(tmpListBox.SelectedItem), ListBoxItem)
tmpListBoxItem.Focus()
End If
End If
End Sub
End Class
End Namespace
最佳答案
在OnIsFocusedChanged
方法中,将依赖项属性的值设置为新值并且似乎只将其设置为新值时,您正在调用OnKeyDownOnTextBox
。
您需要更改ListBoxHasFocus
和TextBoxHasFocus
源属性的值,以便在TextBox
或ListBox
实际获得焦点时重置它们。
关于.net - 如何使用“交互行为”在不同控件之间移动焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52151247/
我需要一些帮助。这都是关于选项卡索引的。我有一个使用 document.getElementById("name").focus(); 的 JavaScript,其中 id="name"的 textb
这是我的第一篇文章,如果您想了解更多信息,请告诉我! 我正在使用选择列表和 jQuery Accordion 。当用户从列表中选择一个值时,它会使用 activate 方法打开折叠面板的相关部分。 除
JQM 1.3.2/ASP.NET MVC 4 当选择一个值时,焦点没有正确设置到输入字段,我错过了什么? 周围的典型 jqm-shadow 没有从选择中移除,输入得到阴影效果,但光标没有设置到输入字
我正在为 Android 开发一个播放列表应用程序,它有一个包含歌曲名称 (TextView) 作为其列表项的 ListView。 随着歌曲的播放,我想突出显示 ListView 中的项目,直到歌曲结
我在这里不知所措,以前从来没有遇到过这个问题。 我无法让 focus() 在任何浏览器中工作。我正在使用 jquery,甚至不能让它与标准的 javascript 一起工作。我也尝试添加超时但仍然没有
登录后我有一个文本字段。登录后光标将自动聚焦在该文本字段上。如何验证该文本字段上是否存在光标/焦点? 文本框的HTML代码如下: 最佳答案 您也可以尝试直接的 webdriver 方法: drive
我有一个框架和一个面板。我永久删除面板并添加另一个面板。添加新面板后,我需要 JTextField 来获得焦点。我该怎么做? 我尝试了 panel.requestFocus() 方法,但没有成功。 示
这个问题在这里已经有了答案: 关闭 13 年前。 Possible Duplicate: Trouble with jquery lavalamp 出于某种原因,无论我点击哪个链接,我的背景颜色都会
在我的表单验证中,在提交时,我正在验证表单,并找到未填充的元素并使用此函数进行聚焦:工作正常 switch (tagName) { case 'TEXT': if (!actualVa
我最近构建了一个 JS/CSS 模态系统。该元素使用的是 Bootstrap 模式,但通过在其中放置无法滚动或无法正确聚焦在移动设备上的表单和大量内容,将其推向了极限。 可以触发模态系统here单击大
我正在建立一个网站,但我想将图片放在背景中,但我无法将其放在我想要的位置。 我希望网页上图像的“焦点”位于图像中心几像素处。宽度我都能看出来,但是高度没有。 图像分辨率为“5760x3840px”。
这个问题在这里已经有了答案: using :focus pseudo class on li or other element else than a,input,button, etc (2 个
每当我创建编辑器的另一个实例(在我的例子中,通过 onkeypress 事件),我就会失去对创建新编辑器时正在输入的编辑器的关注。我怎样才能防止所有编辑都失去对任何事件的关注? 最佳答案 为此,Qui
我试图将焦点放在一个字段上,更改文本的颜色,但无论我尝试什么:它都不起作用。以下是 HTML: .register-section input:focus + .register-section la
我已经为微调器选择的变化设置了一个监听器。在监听器中,我想关注一个 EditText 字段。我使用了以下代码: text_other_msg.setFocusable(true); 它不起作用。我还尝
我在表单屏幕上有几个 UITextField 输入,其中一些有一个数字键盘显示,通过自定义弹出窗口显示。当用户在字段中前进时,我们会根据需要关闭或打开弹出窗口。在 iOS 11 中,似乎“第一响应者”
我在 jQueryUI 中输入焦点时遇到问题。我在按钮上使用了 hover() 方法并且它正在工作,但是输入上的 focus() 不起作用。我不知道为什么。这是代码和 fiddle $(documen
有没有办法在自动对焦完成后随时获取对焦点? 在 Apple 的示例代码中,他们使用: - (void)subjectAreaDidChange:(NSNotification *)notifi
如果我的焦点不在 textField 上,如何移除 NSTextField 上的焦点? 我有一个 NSTextField,我设置了操作:编辑结束时发送。单击 textField 后,当我单击 View
如何通过 jQuery 实现这一点? 当用户单击表单中的任何输入时,它就会获得焦点。当用户从任何输入中单击表单外时,它会变得模糊,但是,在表单本身的输入之间进行 Tab 键切换之间不会触发模糊。 对于
我是一名优秀的程序员,十分优秀!