| 

.NET C# Java Javascript Exception

2
So wie die Bedingte Formatierung in Excel oder Access, also rot bei negativen Werten und grün bei positiven Werten. Hab schon mein Glück mit einem Converter versucht, aber das klappt irgendwie nicht.
Danke.
News:
12.02.2011
Magnum 55 1 5
2 Antworten
2
Ich hab Dir mal ein kleines Beispiel an einer TextBox programmiert. positive Werte werden mit einem grünen, negative Werte mit einem roten Hintergrund angezeigt.

XAML:
xmlns:Converters="clr-namespace:WPFSpielwiese"

<Window.Resources>
<Converters:SignedUnsignedConverter x:Key="SignedUnsigned" />
</Window.Resources>

<TextBox Name="textBox" Background="{Binding ElementName=textBox, Path=Text, Converter={StaticResource SignedUnsigned}}"/>


Converter:
public class SignedUnsignedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value.ToString() == String.Empty)
return null;

int val = 0;
int.TryParse(value as String, out val);

return (val < 0) ? Brushes.Red : Brushes.Green;
}

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


Ich hoffe es hilft dir weiter ;)

Update DataGrid-Version:

XAML (formatiert die ganze Zeile)
<DataGrid Name="dataGrid" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="Price" Binding="{Binding Price}" />
</DataGrid.Columns>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="{Binding Path=Price, Converter={StaticResource SignedUnsigned}}" />
</Style>
</DataGrid.CellStyle>
</DataGrid>


XAML (formatiert die einzelne Zelle)
<DataGrid Name="dataGrid" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTemplateColumn Header="Price">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Price}" Background="{Binding Price, Converter={StaticResource SignedUnsigned}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

</DataGrid.Columns>
</DataGrid>


Converter:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value.ToString() == String.Empty)
return null;

decimal val = decimal.Parse(value.ToString());
return (val < 0) ? Brushes.Red : Brushes.Green;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
12.02.2011
Mario Priebe 6,0k 3 9
Danke. Genau das funktioniert. Beim DataGrid ist allerdings das Problem, dass der Converter nicht aufgerufen wird, wenn ich das an Foreground oder Background einer Spalte binde.
Magnum 13.02.2011
1
Ich hab mein Beispiel oben mal auf ein DataGrid erweitert. Hier musste ich den Converter etwas anpassen.


Mario Priebe 13.02.2011
2
Es klappt. Es klappt. Hurra. Danke.
Magnum 14.02.2011
0
Mmmmh, hab ich noch nie gemacht. Nur so 'ne Idee - vielleicht wäre ja das Abfangen des Event AutoGeneratingColumn ein Ansatz

<data:DataGrid x:Name="Grid" Margin="10" Loaded="MachVoll" AutoGeneratingColumn="meinHandler">

private void meinHandler(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
...
}
12.02.2011
Joachim 3,1k 4 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH