none
aplicar la propiedad style en tiempo de ejecución RRS feed

  • Pregunta

  • Buenas noche nesecito una ayudita por aqui que no consigo información de como puedo aplicar los valores de la propiedad style de un objeto temporal, me explico tengo este codigo que crea un textbox en tiempo de ejecución.

        Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
            Dim txt As New TextBox
            txt.TextWrapping = TextWrapping.Wrap
    
            txt.Width = 100
            txt.Height = 50
            txt.VerticalAlignment = Windows.VerticalAlignment.Top
            txt.HorizontalAlignment = Windows.HorizontalAlignment.Left
            txt.Margin = New Thickness(100, 50, 0, 0)
            Panel1.Children.Add(txt)
        End Sub

    y este es su XAML

    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="325" Width="617">
        <Grid>
            <Border Margin="28,50,33,-1">
            <Canvas Name="Panel1">
                    <Button Canvas.Left="134" Canvas.Top="145" Content="Button" Height="40" Name="Button1" Width="141" />
                </Canvas>
            </Border>
        </Grid>
    </Window>

    y este es el style que quiero aplicar el cual esta en el application.xaml

    <Style x:Key="Font_textbox" TargetType="TextBox">
                    <Setter Property="FontFamily" Value="Century Gothic"/>
                    <Setter Property="Foreground" Value="White"/>
                    <Setter Property="FontSize" Value="16"/>
                    <Setter Property="FontWeight" Value="Bold"/>
                    <Setter Property="BorderBrush" Value="Black"/>
                    <Setter Property="SnapsToDevicePixels" Value="True" />
                    <Setter Property="OverridesDefaultStyle" Value="True" />
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type TextBoxBase}">
                                <Border Name="Border" CornerRadius="4" Padding="2" BorderThickness="1" BorderBrush="Black" >
                                    <Border.Background>
                                        <RadialGradientBrush Center="0.5,-0.5" GradientOrigin="0.5,1.5" RadiusX="1" RadiusY="2" Opacity="0.8">
                                            <GradientStop Color="#00ff00" Offset="0.2"/>
                                            <!--CLARO-->
                                            <GradientStop Color="#00a000" Offset="0.3"/>
                                            <!--MEDIO-->
                                            <GradientStop Color="#206000" Offset="0.5"/>
                                            <!--OSCURO-->
                                        </RadialGradientBrush>
                                    </Border.Background>
                                    <ScrollViewer Margin="0" x:Name="PART_ContentHost"/>
    
                                    <VisualStateManager.VisualStateGroups>
                                        <VisualStateGroup x:Name="CommonStates">
                                            <VisualState x:Name="Normal">
                                                <Storyboard>
                                                    <ColorAnimation Duration="0:0:1" Storyboard.TargetName="Border" 
                                                     Storyboard.TargetProperty="Background.GradientStops[0].Color" To="#00ff00">
                                                    </ColorAnimation>
                                                    <ColorAnimation Duration="0:0:1" Storyboard.TargetName="Border" 
                                                     Storyboard.TargetProperty="Background.GradientStops[1].Color" To="#00a000">
                                                    </ColorAnimation>
                                                    <ColorAnimation Duration="0:0:1" Storyboard.TargetName="Border" 
                                                     Storyboard.TargetProperty="Background.GradientStops[2].Color" To="#206000">
                                                    </ColorAnimation>
                                                </Storyboard>
                                            </VisualState>
                                            <VisualState x:Name="Disabled">
                                                <Storyboard>
                                                    <ColorAnimation Duration="0:0:1" Storyboard.TargetName="Border" 
                                                     Storyboard.TargetProperty="Background.GradientStops[0].Color" To="#206000">
                                                    </ColorAnimation>
                                                    <ColorAnimation Duration="0:0:1" Storyboard.TargetName="Border" 
                                                     Storyboard.TargetProperty="Background.GradientStops[1].Color" To="#204000">
                                                    </ColorAnimation>
                                                    <ColorAnimation Duration="0:0:1" Storyboard.TargetName="Border" 
                                                     Storyboard.TargetProperty="Background.GradientStops[2].Color" To="#122200">
                                                    </ColorAnimation>
                                                </Storyboard>
                                            </VisualState>
                                        </VisualStateGroup>
                                    </VisualStateManager.VisualStateGroups>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>

    Como puedo hacer que cuando se cree ese objeto temporal se le aplique el estilo, nesecito resolver ese problemita para presentar aqui en MSDN una posible solución para el tal tema del GRID manual que no consigo nada claro, despues abro un debate si quieren para terminar de ajustar este proyecto.

    sábado, 15 de diciembre de 2012 22:43

Respuestas

  • Lo que deseas hacer es algo similar a esto:

    <!-- Estilo -->
    <Style x:Key="ButtonStyle" TargetType="Button">
       <Setter Property="BorderBrush" Value="Green" />
       <Setter Property="Foreground" Value="Blue" />
    </Style>
    
    <!-- UserControl -->
    <UserControl x:Class="AppResStyle.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="130" Height="80">
    <Grid x:Name="LayoutRoot" Background="White">
          <Button x:Name="MyButton" Content="Button1" Height="75" Width="125" />
    </Grid>
    </UserControl>
    

    Ahora cuando creas el button en tu evento debes de asignarle el estilo:

    MyButton.Style = Application.Current.Resources["ButtonStyle"] as Style;
    

    Saludos


    © Juan Manuel Rosas Salazar

    • Propuesto como respuesta SalazarJuanMa lunes, 17 de diciembre de 2012 15:32
    • Votado como útil nobunagaii miércoles, 19 de diciembre de 2012 23:08
    • Marcado como respuesta nobunagaii miércoles, 19 de diciembre de 2012 23:16
    lunes, 17 de diciembre de 2012 15:32
  • Lis to ya encontre la manera de hacerlo en .NET  gracias por la pista salazar

    Cod1.Style = Application.Current.Resources("Font_textbox")
    Cuando este todo listo publico el codigo completo para que las personas que tienen problemas con el famoso grid tengan algo parecido y menos problematico digo yo.

    • Marcado como respuesta nobunagaii miércoles, 19 de diciembre de 2012 23:16
    miércoles, 19 de diciembre de 2012 23:16

Todas las respuestas

  • Vamos se puede o no se puede cambiar el style desde tiempo de ejecucion

    domingo, 16 de diciembre de 2012 15:57
  • Lo que deseas hacer es algo similar a esto:

    <!-- Estilo -->
    <Style x:Key="ButtonStyle" TargetType="Button">
       <Setter Property="BorderBrush" Value="Green" />
       <Setter Property="Foreground" Value="Blue" />
    </Style>
    
    <!-- UserControl -->
    <UserControl x:Class="AppResStyle.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="130" Height="80">
    <Grid x:Name="LayoutRoot" Background="White">
          <Button x:Name="MyButton" Content="Button1" Height="75" Width="125" />
    </Grid>
    </UserControl>
    

    Ahora cuando creas el button en tu evento debes de asignarle el estilo:

    MyButton.Style = Application.Current.Resources["ButtonStyle"] as Style;
    

    Saludos


    © Juan Manuel Rosas Salazar

    • Propuesto como respuesta SalazarJuanMa lunes, 17 de diciembre de 2012 15:32
    • Votado como útil nobunagaii miércoles, 19 de diciembre de 2012 23:08
    • Marcado como respuesta nobunagaii miércoles, 19 de diciembre de 2012 23:16
    lunes, 17 de diciembre de 2012 15:32
  • Creo que vamos por bueno camino pero el codigo

    MyButton.Style = Application.Current.Resources["ButtonStyle"] as Style;

    no funciono en que codigo lo especificaste por que estoy usando .net con WPF

    miércoles, 19 de diciembre de 2012 23:10
  • Lis to ya encontre la manera de hacerlo en .NET  gracias por la pista salazar

    Cod1.Style = Application.Current.Resources("Font_textbox")
    Cuando este todo listo publico el codigo completo para que las personas que tienen problemas con el famoso grid tengan algo parecido y menos problematico digo yo.

    • Marcado como respuesta nobunagaii miércoles, 19 de diciembre de 2012 23:16
    miércoles, 19 de diciembre de 2012 23:16