none
Obtener color del border de un TextBlock RRS feed

  • Pregunta

  • Hola, tengo mi siguiente control.

    <BorderName="txbBorderColor" BorderBrush="Red" BorderThickness="1" Grid.Column="0">

                     <TextBlock Name="txbProducto"   Text="UDI DIC24 48"    Grid.Column="0" Background="Black" Foreground="White"

                      TextAlignment="Center"/>

     </Border>

    y lo que quiero es obtener y establecer el color mediante una propiedad en c#

     public Color BordeProducto
            {
                get
                {
                    return Color.
                }
    
                set
                {
                    //
                }
    
            }

    Pero en C# no sé cómo asignarle el color ni como obtenerlo

    muchas gracias.



    saludos

    domingo, 12 de agosto de 2012 18:47

Todas las respuestas

  • hola

    lo hice de esta forma, por un lado en el xaml

    <Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="Window1" Height="300" Width="300">
        <Window.DataContext>
            <local:TestViewModel/>
        </Window.DataContext>
        <Grid>
            
            <Border Name="txbBorderColor" BorderBrush="{Binding BorderColor}" BorderThickness="4" Grid.Column="0">
                <TextBlock Name="txbProducto"  Text="UDI DIC24 48" Grid.Column="0" Background="Black" Foreground="White"
                  TextAlignment="Center"/>
            </Border>
            
        </Grid>
    </Window>

    analiza el xmlns:local, alli se define el viewmodel y despues la clase del viewmodel
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Windows.Media;
    
    namespace WpfApplication1
    {
        public class TestViewModel : INotifyPropertyChanged 
        {
    
            public TestViewModel()
            {
                this.BorderColor = new SolidColorBrush(Colors.Green);
            }
    
            private SolidColorBrush bordercolor;
    
            public SolidColorBrush BorderColor
            {
                get { return bordercolor; }
                set 
                {
                    bordercolor = value;
                    OnPropertyChanged("BorderColor");
                }
            }
    
    
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            protected void OnPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this,
                        new PropertyChangedEventArgs(propertyName));
                }
            }
        }
    }
    

    por supuesto aqui lo asigno desde el constructor pero podrias aplciar cualquier otra accion para cambiar el color

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 15 de agosto de 2012 13:17
  • mmm no funciona porque desde el constructor tu ya definiste el verde por default

    Te pongo el escenario en el que, inicia la aplicación y sólo quieres leer el borderColor del UserControl

    aun no has asignado un color, entonces, que color tiene?

    En la forma que lo hiciste, primeramente tendría que asignarle un color,

    entonces así no tiene caso diseñarlo por fuera, (proyecto userControl)

    y es que, depende del color que tenga, voy a asignarle un color


    saludos

    miércoles, 15 de agosto de 2012 14:17
  • tengo una duda, en mi casa tengo el visual studio 2012

    y aqui en mi trabajo tengo el 2010

    resulta que aquí en el 2010 si puedo accesar directamente al border creado en xaml

    <Border Name="txbBorderColor" BorderBrush="Red" BorderThickness="1" Margin="59,49,45,39" Grid.ColumnSpan="2">

    c#

    txbBorderColor.Background = Brushes.Green;

    txbBorderColor.BorderBrush = Brushes.Violet;

    txbBorderColor.BorderThickness = new Thickness(3);

    pero en mi casa con 2012 no pudo hacer esto, por eso es que realicé ésta pregunta

    ahora estoy confundido...


    saludos

    miércoles, 15 de agosto de 2012 14:24
  • aun no has asignado un color, entonces, que color tiene?

    pero un color por defecto le pones y luego le asignas el que quieras desde otra accion

    la idea era poder cambiarlo desde codigo usando mvvm

    aqui en mi trabajo tengo el 2010  resulta que aquí en el 2010 si puedo accesar directamente al border creado en xaml

    pero no aplicas ningun patron como ser mvvm ?

    porque si lo haces eso de acceder al control no deberias hacerlo


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 15 de agosto de 2012 14:29