none
Control Templates RRS feed

  • Pregunta

  • Buenas tardes.

    Me estoy iniciando en WPF. Se me ha dificultado mucho porque estoy acostumbrado a WindowsForms, y en WPF cambian muchas cosas.

    Estoy en el tema de los Controls Templates.

    Ya tengo creado un template, que está definido por el siguiente código:

    <!-- BOTON -->
        <Style TargetType="{x:Type Button}">
            <Setter Property="OverridesDefaultStyle" Value="True" />
            <Setter Property="SnapsToDevicePixels" Value="True" />
            <Setter Property="Foreground" Value="White" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate x:Name="tmpltButton">
                        <Grid>
                            <Border x:Name="ButtonBorder" 
                                        CornerRadius="5,5,5,5" 
                                        BorderBrush="Black" 
                                        Opacity="1"  
                                        BorderThickness="0">
                                <Border.Background>
                                    <ImageBrush ImageSource="/DockBar;component/Images/20679-bubka-Internet.png" Stretch="Fill" TileMode="None"/>
                                </Border.Background>
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    En el código, le asigno la ruta de una imagen que es usada como fondo.

    La cuestión es, ¿cómo puedo cambiar esa imagen dinámicamente?. Pr ejemplo en el evento click de otro botón.

    Gracias de antemano.

    Saludos


    miércoles, 11 de abril de 2012 19:04

Respuestas

  • Hola.

    podrías acceder al template por código etc.

    Sin embargo; como estamos creando una plantilla para un botón. Creo que una forma más razonable de hacerlo con WPF sería hacer que la propiedad Background del control Border de la plantilla se "asocie" a la propiedad Background del propio boton y despues asignar la propiedad Background del botón. 

    Sería así:

    <!-- BOTON -->
        <Style TargetType="{x:Type Button}">
            <Setter Property="OverridesDefaultStyle" Value="True" />
            <Setter Property="SnapsToDevicePixels" Value="True" />
            <Setter Property="Foreground" Value="White" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate x:Name="tmpltButton">
                        <Grid>
                            <Border x:Name="ButtonBorder" 
                                        CornerRadius="5,5,5,5" 
                                        BorderBrush="Black" 
                                        Opacity="1"  
                                        BorderThickness="0"
                                        Background={TemplateBinding Background}/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    Para aplicar el Background con XAML:

    <Button Name="btnTest" Background="red"/>

    Con C#:

    btnTest.Background=new SolidColorBrush(Colors.Red);

    Espero que te sirva.


    Un saludo. Miguel A. González
    _________________________
    No olvides marcar este post como útil si te ha sido de ayuda

    miércoles, 11 de abril de 2012 22:20