Pregunta

Quiero que algunos de los elementos estén en negrita dependiendo de la propiedad de un objeto que estoy poniendo en el cuadro de lista.

Creo que puede hacerlo cambiando las plantillas, pero parece que no puede encontrar un ejemplo.

¡Gracias!

¿Fue útil?

Solución

Puede hacerlo de manera más simple si usa un convertidor (IntToFontWeightConverter, por ejemplo).

Configure una plantilla de elemento:

 <DataTemplate x:Key="BoldTemplate">
    <TextBlock
        FontWeight="{Binding Path=Position, Converter={StaticResource IntToFontWeightConverter}}"
        Text="{Binding Path=Name}" 
        />
</DataTemplate>     

donde Nombre es lo que desea mostrar y Posición es su propiedad en la que basa el negrita / normal.

Cree su convertidor (según el tipo de propiedad en la que basa la negrita).

class IntToFontWeightConverter :IValueConverter 
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if ((int)value == 1)
        {
            return FontWeights.Bold;
        }

        return FontWeights.Normal;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

Otros consejos

Puede hacer esto usando DataTriggers. Para ver un ejemplo simple del uso de un DataTrigger, puede consultar http://manicprogrammer.com/cs/blogs/willeke/archive/2007/04/25/datatriggers-are-very-cool.aspx

Aquí hay un ejemplo usando ListView, pero lo mismo se aplica a Listbox.

<ListView x:Name="Notes" Margin="4,4,4,4" 
   ItemsSource="{Binding Path=CurrentCustomer.CustomerNotes}"
   ItemTemplate="{DynamicResource CustomerNotesDataTemplate}" 
   Style="{DynamicResource ListViewStyle1}" />

Entonces el ItemTemplate está en los recursos de mi ventana:

        <DataTemplate x:Key="CustomerNotesDataTemplate">
            <Grid MinWidth="400" Style="{DynamicResource NotesRowTriggers}">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="74"/>
                    <ColumnDefinition Width="400"/>
                    <ColumnDefinition Width="125"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
                <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Top" Text="{Binding Path=NoteDate, Converter={StaticResource ShortDateConverter}}" Margin="0,0,4,0" />
                <TextBlock Text="{Binding Path=FreeNote}" Grid.Column="1" HorizontalAlignment="Stretch" Margin="4,0,0,0" Grid.ColumnSpan="1" TextWrapping="Wrap" />
                <TextBlock HorizontalAlignment="Left" VerticalAlignment="Top" Text="{Binding Path=NoteUser}" Grid.Column="2" Width="110" d:LayoutOverrides="Width" Margin="4,0,0,0" Grid.ColumnSpan="1" />
                <CheckBox HorizontalAlignment="Left" IsChecked="{Binding Path=Highlight}" VerticalAlignment="Top" Content="Important" Grid.Column="3" Margin="4,0,4,0"/>
                <CheckBox HorizontalAlignment="Left" IsChecked="{Binding Path=Important}" VerticalAlignment="Top" Content="Alert" Grid.Column="4" Margin="4,0,4,0"/>
            </Grid>
       </DataTemplate>

Y finalmente el estilo con los DataTriggers también está en los recursos de mi ventana.

<Style x:Key="NotesRowTriggers" TargetType="{x:Type Grid}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=Important}" Value="True">
            <Setter Property="Background">
                <Setter.Value>
                    <SolidColorBrush Color="Red" Opacity="0.3" />
                </Setter.Value>
            </Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=Highlight}" Value="True">
            <Setter Property="Background">
                <Setter.Value>
                    <SolidColorBrush Color="Red" Opacity="0.6" />
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

Mi ejemplo es probablemente mucho más detallado de lo que debe ser, pero lo saqué directamente de una de mis aplicaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top