我在DataGridTemplateColumn.CellEditing DataTemplate中设置了东西.我希望在单元格编辑加载并显示模板时,键盘焦点应该被赋予模板中的某个控件.
考虑这个例子,当你进入编辑模式时,文本框不是以键盘为中心的:
<Window x:Class="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>
<DataGrid Name="dg" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Title">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Title}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Value">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Note}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Note}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
Class MainWindow
Private Sub Window_Loaded(ByVal sender As Object,
ByVal e As RoutedEventArgs) Handles MyBase.Loaded
Dim data As New List(Of Item) From
{New Item,
New Item,
New Item} …Run Code Online (Sandbox Code Playgroud) 我需要在窗口没有焦点TextInput时移除焦点。Adobe Air但我找不到正常的方法来做到这一点。
这是一个示例应用程序:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
>
<fx:Script>
<![CDATA[
protected function onFocusIn(event:FocusEvent):void{
input.appendText('I');
}
protected function onFocusOut(event:FocusEvent):void{
input.appendText('o');
// input.focusManager.deactivate();
// stage.focus = null;
// focusManager.setFocus(input2);
// stage.focus = stage;
}
]]>
</fx:Script>
<s:VGroup>
<s:TextInput id="input" focusIn="onFocusIn(event)" focusOut="onFocusOut(event)" />
<s:TextInput id="input2" />
</s:VGroup>
Run Code Online (Sandbox Code Playgroud)
stage.focus = null不起作用 -stage.focus已经是null当窗口没有焦点时,所以它不起作用。
input.focusManager.deativate()确实可以,但这个管理器似乎用于其他控件,所以这不是一个好的选择。文档中说
如果多个 IFocusManagerContainer 同时可见,则 SystemManager 会激活和停用 FocusManager。
但在这个示例应用程序中,我有两个 TextInput,当我停用第一个 TextInput 的 focusManager 时,第二个 TextInput 不再恢复对 alt-tab 的焦点。 …
当我们的USB设备连接时,我需要启动我的应用程序.
我第一次尝试这是一个后台应用程序,注意插入USB设备时.当它注意到我们的设备连接时,它调用ShellExecute()并启动我们的应用程序.
除了在Windows 8中,这很有效.假设我们在Windows 8的"开始"屏幕上.在这种情况下,应用程序在后台启动,并且开始屏幕保持在前面.
我认为这是一个"焦点"问题,因为我实际上希望做的是从"开始"屏幕"偷取焦点".
http://blogs.msdn.com/b/oldnewthing/archive/2009/02/20/9435239.aspx
由于我的后台应用程序没有焦点("开始"屏幕具有焦点;此外,我的应用程序没有UI),因此无法将焦点放在我的前台应用程序上.
让我说,总的来说,我讨厌集中窃取.启动用户想要使用的应用程序对我们的用户来说是一个很大的帮助.
我该如何解决这个问题?也许答案是以编程方式要求启动屏幕启动我的应用程序,但我没有看到这样做的方法:
也许我正以错误的方式接近这一点.建议?
在我的表单中,当我按下ENTER键盘上的按钮时,okAction()应调用该方法(并完美调用).
我的问题是焦点状态,当我填写文本字段然后按下ENTER按钮时,okAction()没有调用,因为焦点在第二个文本字段(不在面板上).
怎么解决这个问题?
public class T3 extends JFrame implements ActionListener {
JButton cancelBtn, okBtn;
JLabel fNameLbl, lNameLbl, tempBtn;
JTextField fNameTf, lNameTf;
public T3() {
add(createForm(), BorderLayout.NORTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 500);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new T3();
}
});
}
public JPanel createForm() {
JPanel panel = new JPanel();
panel.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "Button");
panel.getActionMap().put("Button", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
okAction(); …Run Code Online (Sandbox Code Playgroud) 我有如下WPF xaml代码:
<StackPanel FocusManager.FocusedElement="{Binding FocusedElement}">
<TextBox Name="txtbox1" Text="FirstText"/>
<TextBox Name="txtbox3" Text="SecondText"/>
<TextBox Name="txtbox2" Text="ThirdText"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
如何在ViewModel中将FocusedElement绑定到属性?类似的代码如下:
Switch(Type)
{
Case "FirstType" :
FocusedElement = "txtbox1";
break;
Case "SecondType" :
FocusedElement = "txtbox2";
break;
Case "ThiredType" :
FocusedElement = "txtbox3";
break;
}
Run Code Online (Sandbox Code Playgroud) 以下是我的代码片段.我有一个JTable.我已经扩展了DefaultCellEditor来创建我自己的编辑器.我为单元格添加了关键的监听器和鼠标监听器.我也有一个JButton.当我点击JButton时,我希望JTable中的第一个单元格进入编辑模式.为此我使用了requestFocus和editCellAt(0,0).我已将此代码放入actionperformed中.
public void actionPerformed(ActionEvent e)
{
System.out.println("action performed");
if(e.getSource().equals(btn))
{
oTable.requestFocus();
oTable.setRowSelectionInterval(0, 0);
oTable.editCellAt(0, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
这将光标放在第一个单元格中.但是,当我输入任何内容时,关键事件不会被触发!注意:如果我使用鼠标单击单元格然后键入,它会触发键事件.但我不想做这个额外的点击.
focusmanager ×6
focus ×2
java ×2
swing ×2
wpf ×2
air ×1
apache-flex ×1
bind ×1
delphi ×1
jtable ×1
key-bindings ×1
keyboard ×1
windows ×1
xaml ×1