Deseo utilizar un <Image>
en mi aplicación WPF que responde a los clics del mouse. Solo los eventos 'Mouse Up' y 'Moue Down' están disponibles de inmediato. Encuentro esto bastante particular. ¿Hay alguna manera de extender el control o una forma de usar otro control para dar el mismo efecto?WPF Image Control with Click Evento
Respuesta
Para ampliar la respuesta de Shawn Mclean, una de las grandes capacidades de WPF es la capacidad de aprovechar el comportamiento de un control mientras se cambia por completo el aspecto de ese control. Si desea crear una imagen con ese comportamiento como un botón (completa con eventos de clic, enlace de comandos, asignación predeterminada de botones, etc.) puede colocar una imagen en un control de botón y volver a colocar ese botón para quitar el botón "chrome". Esto le dará la API agradable de un botón con el aspecto que desee. Puede reutilizar este estilo y este enfoque reducirá la necesidad de crear controladores de eventos en su código si tiene comandos para enlazar a sus nuevos botones de imagen.
Crear un estilo así es bastante fácil. Simplemente cree un nuevo recurso de estilo con una clave con nombre en un recurso y asigne este recurso a la propiedad Style de sus botones. Este es un ejemplo Tiré juntos:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ButtonStyleTestApp.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Window.Resources>
<Style x:Key="NoChromeButton" TargetType="{x:Type Button}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid x:Name="Chrome" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="#ADADAD"/>
<Setter Property="Opacity" TargetName="Chrome" Value="0.5"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid x:Name="LayoutRoot" Background="#FF44494D">
<Button Style="{DynamicResource NoChromeButton}" Click="ButtonClicked" >
<Image Source="Desert.png" Stretch="None"/>
</Button>
</Grid>
</Window>
Use MouseUp. No puedes desplazarte o enfocarte en el control de la imagen de todos modos, así que esa es la única forma de hacer clic en él.
Otra opción es simplemente poner la imagen en un botón y eliminar todos los estilos editando la plantilla de control para que parezca solo una imagen. De esa forma, puedes enfocarte usando el teclado.
Se puede utilizar un conjunto de 4 manipuladores y 2 variables booleanas:
booleanos:
- IsClicked
- IsEntered
manipuladores:
- OnMouseDown- sets IsClicked true;
- OnMouseEnter- sets IsEntered true;
- OnMouseLeave - sets IsEntered false;
- onmouseup - si (IsClicked & & IsEntered) {/ TODO tu lógica /} y luego conjuntos IsClicked falsa;
Esta construcción implementa la funcionalidad del clic clásico.
- OnMouseLeave - también se establece is esClicked a falso; De lo contrario, puede hacer clic con el mouse y soltar el mouse. A continuación, haga clic y suelte el mouse para hacer un clic.
- 1. Rectángulo WPF no tiene un evento Click
- 2. WPF Custom Control: TemplateBinding to Image
- 3. evento Click para DataGridCheckBoxColumn
- 4. WPF Image Command Binding
- 5. WPF image resources
- 6. evento Click para .Net (Windows Forms) control de usuario
- 7. Growl Python binding with Click feedback?
- 8. de jQuery evento click
- 9. ASP.NET + ModalPopupExtender + Click Evento
- 10. ¿Puedo explicity mostrar información sobre herramientas en el evento Mouse Click en WPF?
- 11. resize svg image insert with content: url()
- 12. WPF Image Zooming
- 13. WPF Image Tooltip
- 14. Botón WPF Mouseover Image
- 15. Cambiando el valor de OG: IMAGE con jQuery click
- 16. AutoCompleteTextView evento click en Android
- 17. ckeditor click evento no funciona
- 18. ExtJs HTML Component Click Evento
- 19. jQuery click() evento catch-all?
- 20. WPF StackPanel con Click Y DoubleClick
- 21. WinForm Control with Opacity
- 22. WPF Imagen/Evento representación
- 23. wpf canvas background image dinámicamente
- 24. WPF Dynamic Layout with ItemsControl and Grid
- 25. jQuery Mobile: reemplace el evento click por el evento vclick
- 26. El evento LongClick también desencadena el evento Click
- 27. evento click jQuery funciona solamente una vez
- 28. evento click se disparó dos veces - jQuery
- 29. Ext JS en el evento click
- 30. Jasmine no puede activar el evento click
Coloque la imagen dentro de un botón de acuerdo con http://stackoverflow.com/questions/2720463/creating-a-clickable-image-in-wpf – LosManos
Pruebe esto. – VivekDev