J'essaie d'appliquer un formatage conditionnel à une grille de données WPF. Pour toute cellule de la grille, si le contenu est un entier, le format d'affichage doit être zéro décimale. Si le contenu a des décimales, il faut les afficher avec la valeur par défaut définie dans le stringformat.
Quelqu'un a-t-il une idée de la manière dont je pourrais réaliser ce type de formatage conditionnel ? J'ai écrit un convertisseur qui peut vérifier l'existence de décimales, mais je n'ai pas réussi à trouver comment je pourrais l'appliquer dans mon XAML à mon style de cellule ou à ma colonne de texte.
Style de cellule - Il s'agit du style que je souhaite définir.
<Style x:Key="MyCellStyle" TargetType="DataGridCell">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
Colonne de la grille - Je voudrais appliquer le style appliqué à cette colonne
<DataGridTextColumn x:Key="ColumnName"
Header="ColumnName"
SortMemberPath="MyColumnSort"
Binding="{Binding myColBinding, StringFormat={}{0:N2}}"
IsReadOnly="True"
Width="40" />
Convertisseur - J'utiliserais ce convertisseur pour déterminer si ce style est appliqué.
public class NoDecimalConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int converted;
int.TryParse(value.ToString(), out converted);
value.ToString();
return int.TryParse(value.ToString(), out converted);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
J'ai essayé de le faire en ajoutant un déclencheur de données au style de ma cellule, comme indiqué ci-dessous, mais j'ai obtenu une erreur indiquant "Cannot find the Style Property 'StringFormat' on the type 'System.Windows.Controls.DataGridCell'".
<Style x:Key="MyCellStyle" TargetType="DataGridCell">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Style.Triggers>
<DataTrigger Binding="{Binding NoDecimalConvertor}" Value="False" >
<Setter Property="StringFormat" Value="true" />
</DataTrigger>
</Style.Triggers>
</Style>
Cela fait des jours que je me heurte à cette question et je vous serais reconnaissant de m'indiquer la meilleure façon d'aborder ce problème.