2011-08-30 24 views
18

tengo un botón WPF define así:Establecer el contenido de un botón en el estilo

<Button Style="{StaticResource RevertButtonStyle}" /> 

aquí es cómo el estilo se ve:

<Style x:Key="RevertButtonStyle" TargetType="{x:Type Button}"> 
    <Setter Property="Height" Value="25" /> 
    <Setter Property="Width" Value="20" /> 
    <Setter Property="Margin" Value="3,0,0,0" /> 
</Style> 

¿Cómo cambio el estilo para especificar el contenido de usar una imagen llamada "revert.png"?

Gracias,

Respuesta

26

No puede usar establecer la propiedad Content en una instancia del control Image, ya que la imagen podría ser utilizada por más de un botón. Esto daría como resultado una excepción "visual es ya el hijo de otra visual".

En su lugar, se puede utilizar un DataTemplate así:

<Setter Property="ContentTemplate"> 
    <Setter.Value> 
     <DataTemplate> 
      <Image Source="revert.png" /> 
     </DataTemplate> 
    </Setter.Value> 
</Setter> 

Obviamente es posible que tenga que ajustar la fuente de la imagen URI.

+0

funcionó como un encanto. Gracias. – sean717

+0

Esto me ayudó de inmediato. Tuve la excepción "visual is already ..." con una ruta de acceso que estaba configurando como el contenido del botón en un estilo. Gracias. –

3

En mi solicitud, he definido un control ImageButton que especifica una propiedad ImageSource.

Esto está diseñado al estilo siguiente:

<Style TargetType="{x:Type controls:ImageButton}"> 
    <Setter Property="ForceCursor" Value="True" /> 
    <Setter Property="Cursor" Value="Hand" /> 

    <Setter Property="ToolTip" Value="{Binding Path=Caption, RelativeSource={RelativeSource Mode=Self}}" /> 

    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type controls:ImageButton}"> 
       <Image Width="16" Height="16" Source="{Binding Path=ImageSource, RelativeSource={RelativeSource Mode=TemplatedParent}}" Name="image" /> 

       <ControlTemplate.Triggers> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter TargetName="image" Property="Opacity" Value="0.3" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Pero en su caso, si desea utilizar la misma imagen para todos los Button objetos con una cierta Style conjunto, que podría simplemente utilizar <Image Source="pack://application:,,,/My.Assembly.Name;component/Icons/revert.png" /> en el Template si la imagen que desea utilizar se ha incluido como un recurso en la aplicación.

+0

thx, pero no funcionó muy bien. Por favor, mira la publicación de CodeNaked. – sean717

+0

Lo siento, sí, me equivoqué. Debería haber sido ContentTemplate (como en el volcado de código que publiqué), no Content como en mi resumen original. Haber editado para futuros espectadores. – fatty

Cuestiones relacionadas