Pregunta

Quiero capturar clics del ratón en un 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>

Ahora sólo recibo un evento de clic del ratón cuando el usuario entra por primera vez el TextBox. Después de este TextBox tiene el foco del teclado, no lo recibirá evento de clic del ratón más. Cualquier idea de cómo conseguir este trabajo?

¿Fue útil?

Solución

cuadro de texto Clase

  

Cuadro de texto se ha incorporado en el manejo de la   burbujeante MouseUp y MouseDown   eventos. En consecuencia, evento personalizado   manipuladores, que escuchan o MouseUp   eventos MouseDown de un campo será   No se llamará . Si tiene que responder   a estos eventos, detecte el   túnel y PreviewMouseUp   eventos PreviewMouseDown su lugar, o   registrar los manejadores con el   argumento handledEventsToo (este último   opción sólo está disponible a través de   código). No marque el evento controlado   a menos que desee deliberadamente   Cuadro de texto desactivar controlador nativo de   estos eventos, y tenga en cuenta que esta   tiene efectos notables sobre el control de   La interfaz de usuario.

En ti código que está disparando solo MouseLeftButtonUp

Otros consejos

Puede utilizar el evento PreviewMouseDown, y capturar los clics de esa manera antes de que las partes internas del proceso de control del clic:

<TextBox x:Name="t" PreviewMouseDown="TextBox_MouseDown" Height="32" Width="274" />

Esto es ejemplo de código para aquellos que están usando MVVM

Funciona bien para los eventos que están heredando de control.

En 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;
    }

En Vista (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>

Espero que esto le ahorra tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top