cliques captura do mouse em WPF TextBox
-
18-09-2019 - |
Pergunta
Eu quero cliques do mouse captura em um TextBox
:
<Window x:Class="WpfApplication2.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<TextBox x:Name="t" MouseDown="TextBox_MouseDown"
MouseLeftButtonDown="TextBox_MouseLeftButtonDown"
MouseLeftButtonUp="TextBox_MouseLeftButtonUp"
Height="50" />
</Grid>
</Window>
Agora eu só receber um evento clique do mouse quando o usuário entra pela primeira vez o TextBox
. Após este TextBox
tem o foco do teclado, eu não receber mais clique do mouse evento. Alguma idéia de como começar este trabalho?
Solução
TextBox foi construído com a manipulação para o borbulhamento SoltarOBotãoDoRato e PremirOBotãoDoRato eventos. Consequentemente, evento personalizado manipuladores que escutam para MouseUp ou eventos MouseDown de uma vontade TextBox não ser chamado . Se você precisa responder a esses eventos, ouça o tunneling PreviewMouseUp e eventos PreviewMouseDown vez, ou registrar os manipuladores com o argumento handledEventsToo (este último opção só está disponível através código). Não marque o evento manipulado a menos que queira deliberadamente para desativar manipulação nativa de TextBox esses eventos, e estar ciente de que este tem efeitos notáveis ??sobre o controle UI.
Em que você código que você está disparando apenas MouseLeftButtonUp
Outras dicas
Você pode usar o evento PreviewMouseDown, e capturar todos os cliques que forma antes das partes internas do processo de controle do clique:
<TextBox x:Name="t" PreviewMouseDown="TextBox_MouseDown" Height="32" Width="274" />
Aqui está um exemplo de código para aqueles que estão usando MVVM
Ele funciona muito bem para os eventos que são herdando de controle.
Em ViewModel:
private ICommand _merchantRefereneceCommand;
public ICommand MerchantReferenceCopyToClipboard
{
get { return _merchantRefereneceCommand ?? (_merchantRefereneceCommand = new MerchantRefereneceCommand(this)); }
set { _merchantRefereneceCommand = value; }
}
public class MerchantRefereneceCommand : ICommand
{
private readonly PaymentViewModel _paymentViewModel;
public MerchantRefereneceCommand(PaymentViewModel paymentViewModel)
{
_paymentViewModel = paymentViewModel;
}
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
//Your code goes here.
}
public event EventHandler CanExecuteChanged;
}
In View (XAML):
<TextBox Grid.Row="1" x:Name="MerchantReference" MaxLength="10" IsReadOnly="True"
Text="{Binding MerchantReference, Mode=OneWay}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick" >
<i:InvokeCommandAction Command="{Binding MerchantReferenceCopyToClipboard}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
Hope isso poupa-lhe algum tempo.