2016-08-29 2 views
0

У меня есть несколько всплывающих окон в моем приложении WPF, которые отлично работают.vb.net wpf popup no focus

Однако этот последний не принимает фокус или ввод в текстовые поля. И я не понимаю, почему.

    <Label x:Name="lblSearch" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="1" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,5" Height="30" Width="Auto">Search</Label> 
        <TextBox Name="txtSearch" Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="1" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,5" Height="30" Width="200" IsReadOnly="False" IsEnabled="True"></TextBox> 
        <Button Name="btnSearch" Grid.Row="0" Grid.Column="2" Style="{StaticResource ButtonSmall}" Template="{DynamicResource BlackButton}" Margin="5">Search</Button> 

        <Label x:Name="lblReplace" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="1" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,5" Height="30" Width="Auto">Replace</Label> 
        <TextBox Name="txtReplace" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="1" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,5" Height="30" Width="200" IsReadOnly="False" IsEnabled="True"></TextBox> 
        <Button Name="btnReplace" Grid.Row="1" Grid.Column="2" Style="{StaticResource ButtonSmall}" Template="{DynamicResource BlackButton}" Margin="5">Replace</Button> 

        <Button Name="btnStopSearch" Grid.Row="2" Grid.Column="3" Style="{StaticResource ButtonSmall}" Template="{DynamicResource BlackButton}" Margin="5">Done</Button> 

        <DockPanel Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2"> 
        </DockPanel> 
       </local:GridEx> 
      </DockPanel> 
     </Border> 
    </Border> 
</Popup> 

Я попробовал этот код, чтобы заставить сосредоточиться на ней, но безрезультатно:

Private searchWhere As String = Nothing 
Private Sub txtTypeEditor_keyDown(sender As Object, e As Forms.KeyEventArgs) Handles txtTypeEditor.KeyDown 
    If e.KeyCode = Forms.Keys.F AndAlso e.Control AndAlso Not e.Alt AndAlso Not e.Shift Then 
     PopupSearch.IsOpen = True 
     txtSearch.Focus() 
     Keyboard.Focus(txtSearch) 
     searchWhere = "TypeEditor" 
     e.Handled = True 
    End If 
End Sub 

Private Sub Popup1_Opened(sender As Object, e As EventArgs) Handles PopupSearch.Opened 
    txtSearch.Focus() 
    Keyboard.Focus(txtSearch) 
End Sub 

Похоже txtTypeEditor держит на фокус. Любая идея, как размыть его?

У меня есть обходное решение: если я размываю текстовое поле, фокусируясь на другом текстовом поле, тогда всплывающее окно принимает фокус.

Однако, если пользователь нажимает текстовое поле txtTypeEditor и затем нажимает поле ввода во всплывающем окне, фокус мыши переключается на всплывающее окно, но фокус клавиатуры остается с текстовым полем.

ответ

0

Это всего лишь догадка: Возможно, это связано с событием txtTypeEditor_keyDown как-нибудь в txtTypeEditor? Вы могли бы дать ему попробовать с keyPress вместо (если это не влияет на любую другую часть вашего кода)

+0

Я не знаю, как проверить CTRL-F ключ с Keypress – Adder

+0

вы могли бы захватить нажмите CTRL через _keydown и установите в обработчике значение bool ctrl = true, затем запустите _keyPress для «F» и нажмите ctrl = true – DonGru