2010-10-07 20 views
10

Estoy colocando una aplicación WPF en la que tengo un control de imagen al que quiero vincular un objeto de comando personalizado desde mi modelo de vista que se ejecutará cuando se haga clic en la imagen. He expuesto el objeto de comando desde mi modelo de vista y solo necesito vincularlo al control de imagen.WPF Image Command Binding

¿Es posible vincular este objeto de comando a un control de imagen? Si es así, cualquier consejo sería apreciado.

+0

¿No estás seguro de lo que quieres decir con eso? ¿Qué quieres que haga la imagen si está encuadernada? –

Respuesta

16

que necesita para poner la imagen en un botón, y se unen en el botón para el comando:

<Button Command="{Binding MyCommand}"> 
    <Image Source="myImage.png" /> 
</Button> 

Si no desea que el botón estándar de cromo, solo cambia la plantilla del botón con algo como que:

<ControlTemplate x:Key="tplFlatButton" TargetType="{x:Type Button}"> 
    <Border Width="{TemplateBinding Width}" 
      Height="{TemplateBinding Height}" 
      Background="{TemplateBinding Background}" 
      BorderBrush="{TemplateBinding BorderBrush}" 
      BorderThickness="{TemplateBinding BorderThickness}"> 
     <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
          VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
          TextElement.Foreground="{TemplateBinding Foreground}" 
          TextElement.FontFamily="{TemplateBinding FontFamily}" 
          TextElement.FontSize="{TemplateBinding FontSize}" 
          TextElement.FontStretch="{TemplateBinding FontStretch}" 
          TextElement.FontWeight="{TemplateBinding FontWeight}"/> 
    </Border> 
</ControlTemplate> 

en cuenta que también tendrá que cambiar otras propiedades para obligar un estilo de botón por defecto, de lo contrario la plantilla anterior utilizará el fondo del botón predeterminado y la frontera:

<Style x:Key="stlFlatButton" TargetType="{x:Type Button}"> 
    <Setter Property="Background" Value="{x:Null}" /> 
    <Setter Property="BorderBrush" Value="{x:Null}" /> 
    <Setter Property="BorderThickness" Value="0" /> 
    <Setter Property="Template" Value="{StaticResource tplFlatButton}" /> 
</Style> 
+0

Gracias a un millón, trabajó un regalo. – David

11

Puede ser más fácil de evitar el uso de un botón y utilizar un Hyperlink lugar:

<TextBlock DockPanel.Dock="Top"> 
    <Hyperlink Command="{Binding SomeCommand}"> 
     <Image Source="image.png" /> 
    </Hyperlink> 
</TextBlock> 

Tenga en cuenta que esto convertirá en el hipervínculo con la decoración de texto por defecto, así que es conveniente añadir un estilo que quita que - poner esto en el diccionario de recursos del elemento contenedor hará el truco:

<Style x:Key={x:Type Hyperlink}" TargetType="Hyperlink"> 
    <Setter Property="TextDecorations" 
      Value="{x:Null}" /> 
</Style> 
4

versión simplificada de respuesta de @ Robert Rossney:

<TextBlock> 
    <Hyperlink Command="{Binding SomeCommand}" TextDecorations="{x:Null}"> 
     <Image Source="{StaticResource image.png}" Width="16" /> 
    </Hyperlink> 
</TextBlock> 

La mejor manera de incluir una imagen es utilizar un {StaticResource x}, ver WPF image resources

13

Aquí hay otra solución personalmente me encanta utilizar la mayoría de las veces si quiero una imagen con el comando sin formar parte de otro control.

<Image Source="Images/tick.png" Cursor="Hand" Tooltip="Applies filter"> 
    <Image.InputBindings> 
      <MouseBinding Gesture="LeftClick" Command="{Binding ApplyFilter, Mode=OneTime}" /> 
    </Image.InputBindings> 
</Image> 

que establezca sus propiedades Hand y Tooltip por lo que es más evidente que se trata de una acción y no una imagen estática.

+0

Por lo que puedo ver, esta solución ya ejecuta el comando cuando se presiona el botón del mouse. Esperaría que la ejecución se inicie cuando se suelta el botón del mouse. Como el comportamiento de un botón. ¡Solo un comentario! – Florian

+1

@Florian Gracias, no me di cuenta. Normalmente no me detengo en medio de hacer clic en algo. –