none
¿Como cambiar el Color de Foreground de cualquier objeto que tenga una selección y Eliminar bordes de una celda en DataGrid? RRS feed

  • Pregunta

  • Bueno me explico un poco...
    Lo que trato de hacer es darle a mi aplicación un aspecto mucho más agradable por lo que tengo en cuenta hasta los detalles más insignificantes...

    Esta vez trato de hacer que el color de texto de un objeto no se ponga de color blanco cuando se seleccione con el mouse.... Algo que trae por defecto el TextBox en WPF pero que me gustaria aplicar a los demas controles..

    Anexo una imagen por si no me eh dado a entender bien:



    Y el segundo punto es como mediante XAML o alguna propiedad de un DataGrid eliminar el molesto borde extra que se crea al seleccionar determinada casilla pues eh intentado modificando la propiedad SelectionMode pero aunque me seleccione la fila completa me sigue resaltando la casilla a la que se le dio clic:

     

    Gracias de ante mano !

    miércoles, 21 de septiembre de 2011 21:08

Respuestas

  • Hola David

    Creo que he encontrado una mejor propuesta que la que yo ponía... y es la de crear un estilo propio para tus combobox, de que manera, mira lo que dice MatthiasShapiro en esta página: http://social.msdn.microsoft.com/Forums/en-IE/wpf/thread/69efe4ab-5768-4c95-a994-4aae1dad9c40


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    • Marcado como respuesta David 00695 jueves, 22 de septiembre de 2011 3:13
    miércoles, 21 de septiembre de 2011 23:22
  • Antonio !

    Investigando un poco y trabajando con ensayo y error al fin le di al clavo !
    Ahora les comparto mi solución por si les es de utilidad:

    Para cambiar el Color de selección (Highlight en ingles) se usa este codigo:

    <Objeto.Resources>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#Color"/>
            </Objeto.Resources>
    

    Este sirve para casi todos los controles lo unico que hay que hacer es Reemplazar "Objeto" por el nombre del Objeto por ejemplo ComboBox.Resources y #Color por el Color que deseen !

     

    Esto solo nos cambiara el tipico color azul que windows pone a las selecciones pero el texto seguira de un color blanco (lo que muchas veces no es conveniente si usamos un color de selección muy claro) ahora con el siguiente codigo vamos a cambiar el Foreground cuando se selecciona:

     

    <Style TargetType="{x:Type ComboBoxItem}">           
            <Style.Triggers>
                <Trigger Property="IsHighlighted" Value="True">
                    <Setter Property = "Foreground" Value="#Color"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    

    Aquí solo reemplazamos #Color por el color que queremos aparesca cuando este el Highlight (Solo lo eh provado con los ComboBoxes, me supongo debe funcionar con los demas controles modificando el TargetType)

    A la final tenemos este codigo que podemos incluir en un diccionario de recursos:

    <Style TargetType="{x:Type ComboBox}">
            <Style.Resources>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="RED"/>
            </Style.Resources> 
            
        </Style>
    
        <Style TargetType="{x:Type ComboBoxItem}">    
            
            <Style.Triggers>
                <Trigger Property="IsHighlighted" Value="True">
                    <Setter Property = "Foreground" Value="BLACK"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    

    Espero les sea de utilidad, pues son pequeños detalles que no se podian lograr en WinForms y que WPF y XAML dan la posibilidad de implementar que aunque insignificantes me ah tomado un buen trabajo conseguirlo !

     

    • Marcado como respuesta David 00695 jueves, 22 de septiembre de 2011 2:01
    jueves, 22 de septiembre de 2011 2:00

Todas las respuestas

  • Hola David

    Para el Datagrid creo que te puede ayudar esto:

    <DataGrid.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="BorderThickness" Value="0"/>
        </Style>
    </DataGrid.CellStyle>
    


    Para el Combobox, no lo he probado, pero mira esto:

    <ComboBox>
        <ComboBox.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextKey}">Red</SolidColorBrush>
    <!--<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}">Red</SolidColorBrush>-->
        </ComboBox.Resources>
        <ComboBoxItem>One</ComboBoxItem>
        <ComboBoxItem>Two</ComboBoxItem>
    </ComboBox>
    


    Espero te sirva

    Un saludo

    PD: David González, =/ no menos de una semana que hablamos de AMD e Intel y mi computador se dañó


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    miércoles, 21 de septiembre de 2011 22:36
  • Antonio:

    Efectivamente la solución para el DataGrid que me diste funciono de maravilla !

    Gracias...

    La otra para el combobox la conocia pero esta solo cambia el color de la selección de azul pero sigue dejando el texto en blanco....

    ¿Por casualidad no sabes como insertar este pedazo de codigo en un diccionario de recursos? Para que todos los ComboBox de la aplicación queden con este recurso:

    <ComboBox.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextKey}">Red</SolidColorBrush>
        </ComboBox.Resources>
    


    Siempre que lo intento me tira:

    miércoles, 21 de septiembre de 2011 22:57
  • Hola David

    Creo que he encontrado una mejor propuesta que la que yo ponía... y es la de crear un estilo propio para tus combobox, de que manera, mira lo que dice MatthiasShapiro en esta página: http://social.msdn.microsoft.com/Forums/en-IE/wpf/thread/69efe4ab-5768-4c95-a994-4aae1dad9c40


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    • Marcado como respuesta David 00695 jueves, 22 de septiembre de 2011 3:13
    miércoles, 21 de septiembre de 2011 23:22
  • Antonio !

    Investigando un poco y trabajando con ensayo y error al fin le di al clavo !
    Ahora les comparto mi solución por si les es de utilidad:

    Para cambiar el Color de selección (Highlight en ingles) se usa este codigo:

    <Objeto.Resources>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#Color"/>
            </Objeto.Resources>
    

    Este sirve para casi todos los controles lo unico que hay que hacer es Reemplazar "Objeto" por el nombre del Objeto por ejemplo ComboBox.Resources y #Color por el Color que deseen !

     

    Esto solo nos cambiara el tipico color azul que windows pone a las selecciones pero el texto seguira de un color blanco (lo que muchas veces no es conveniente si usamos un color de selección muy claro) ahora con el siguiente codigo vamos a cambiar el Foreground cuando se selecciona:

     

    <Style TargetType="{x:Type ComboBoxItem}">           
            <Style.Triggers>
                <Trigger Property="IsHighlighted" Value="True">
                    <Setter Property = "Foreground" Value="#Color"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    

    Aquí solo reemplazamos #Color por el color que queremos aparesca cuando este el Highlight (Solo lo eh provado con los ComboBoxes, me supongo debe funcionar con los demas controles modificando el TargetType)

    A la final tenemos este codigo que podemos incluir en un diccionario de recursos:

    <Style TargetType="{x:Type ComboBox}">
            <Style.Resources>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="RED"/>
            </Style.Resources> 
            
        </Style>
    
        <Style TargetType="{x:Type ComboBoxItem}">    
            
            <Style.Triggers>
                <Trigger Property="IsHighlighted" Value="True">
                    <Setter Property = "Foreground" Value="BLACK"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    

    Espero les sea de utilidad, pues son pequeños detalles que no se podian lograr en WinForms y que WPF y XAML dan la posibilidad de implementar que aunque insignificantes me ah tomado un buen trabajo conseguirlo !

     

    • Marcado como respuesta David 00695 jueves, 22 de septiembre de 2011 2:01
    jueves, 22 de septiembre de 2011 2:00
  • Hola David

    Hmmm no entiendo... precisamente en el enlace que te pasé de ultimo se encuentra la respuesta tal cual como tu la has puesto. 

    Un saludo

    PD: que bien que hayas podido hallar la respuesta.


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    jueves, 22 de septiembre de 2011 3:08
  • Hola David

    Hmmm no entiendo... precisamente en el enlace que te pasé de ultimo se encuentra la respuesta tal cual como tu la has puesto. 

    Un saludo

    PD: que bien que hayas podido hallar la respuesta.


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    Jaja ! Si disculpa ! Apenas lo note ! ahora cuando revise el enlace que pusiste vi que el hacia lo mismo que yo hice en un diccionario de recursos pero modificando las plantillas y cuando lo hice me tiraba errores :s

    La verdad no habia notado que era lo mismo pero ya veo que si ! ^^ Asi que la respuesta la tuve en mis narices todo el tiempo jeje vaya vida esta !

    Igual muchas Gracias ! ahí te marco como respuesta !

    Y disculpa el pequeño descuido
    jueves, 22 de septiembre de 2011 3:13