2012-10-26 5 views
1

J'ai un Ellipse dans un DataGridTemplateColumn, les données qu'il est lié à se affiche correctement dans la colonne suivante, mais ma colonne d'ellipse est toujours vide, rien affiché.WPF Impossible d'afficher Ellipse dans DataGridTemplateColumn

<DataGridTemplateColumn CanUserResize="False" Header="StateEllipse"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <Ellipse Fill="{Binding Path=State, Converter={StaticResource StateToBrush}}" Width="10" Height="10" /> 
       <TextBlock Text="{Binding Path=State}" /> 
      </StackPanel> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 
<DataGridTextColumn Header="State" Binding="{Binding Path=State}" /> 

Mon Converter ressemble à ceci:

using System; 
using System.Globalization; 
using System.Windows.Data; 
using System.Windows.Media; 

namespace ThisNS.NS.Converter 
{ 
    [ValueConversion(typeof(int), typeof(Brush))] 
    public sealed class StateToBrush : IValueConverter 
    { 

    #region IValueConverter Members 

     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      Color stateColor = Colors.Yellow; 
      switch ((int)value) 
      { 
       case 0: 
        stateColor = Colors.Green; 
        break; 
       case 1: 
        stateColor = Colors.Red; 
        break; 
      } 
      return new SolidColorBrush(Colors.Yellow); 
     } 

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

    #endregion 
    } 
} 

Ma deuxième colonne qui affiche la valeur d'état est ok, mais le premier avec l'ellipse est toujours vide.

Le convertisseur est jamais appelé, si la liaison est jamais binded.

Quelqu'un a une idée/suggestion?

Merci.

+0

essayer de faire taille par défaut de l'ellipse cela fonctionnera pour vous. – JSJ

+0

Pouvez-vous afficher le code XAML dans lequel vous définissez la ressource StateToBrush contenant le convertisseur? –

Répondre

0

On dirait que vous ne parviennent pas à définir la taille de l'Ellipse?

Vous devez définir ses propriétés Largeur et Hauteur pour que pour montrer que je crois ...

+0

J'ai ajouté "Width =" 10 "Height =" 10 "", l'ellipse est toujours non visible. –

1

Je viens d'essayer de recréer votre problème, mais dans mon cas, il fonctionne très bien. S'il vous plaît voir ci-dessous.

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:WpfApplication1="clr-namespace:WpfApplication1" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.Resources> 
    <WpfApplication1:StateToBrush x:Key="StateToBrush"/> 
</Window.Resources> 
<Grid> 
    <DataGrid ItemsSource="{Binding Items}" > 
     <DataGrid.Columns> 
      <DataGridTemplateColumn CanUserResize="False" Header="StateEllipse"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <Ellipse Fill="{Binding Converter={StaticResource StateToBrush}}" Width="10" Height="10" /> 
          <TextBlock FontWeight="Bold" Foreground="Blue" Text="{Binding}" /> 
         </StackPanel> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTextColumn Header="State" Binding="{Binding}" /> 
      <DataGridTemplateColumn CanUserResize="False" Header="StateEllipse 2"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <Ellipse Fill="{Binding Converter={StaticResource StateToBrush}}" Width="10" Height="10" /> 
          <TextBlock FontWeight="Bold" Foreground="Green" Text="{Binding}" /> 
         </StackPanel> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     DataContext = this; 
     InitializeComponent(); 
     Items = new ObservableCollection<int>(); 
     for (int i = 0; i < 100; i++) 
     { 
      Items.Add(i); 
     } 
    } 

    public ObservableCollection<int> Items 
    { 
     get { return (ObservableCollection<int>)GetValue(ItemsProperty); } 
     set { SetValue(ItemsProperty, value); } 
    } 

    public static readonly DependencyProperty ItemsProperty = 
     DependencyProperty.Register("Items", typeof(ObservableCollection<int>), typeof(MainWindow)); 


} 

[ValueConversion(typeof(int), typeof(Brush))] 
public sealed class StateToBrush : IValueConverter 
{ 

    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     Color stateColor = Colors.Yellow; 
     switch ((int)value) 
     { 
      case 0: 
       stateColor = Colors.Green; 
       break; 
      case 1: 
       stateColor = Colors.Red; 
       break; 
     } 
     return new SolidColorBrush(stateColor); 
    } 

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

    #endregion 
} 
+0

J'ai un point d'arrêt dans le code de mon convertisseur mais ça n'arrive jamais. Donc le convertisseur n'est jamais appelé ...?! –

+0

Vous semblez manquer le "Path =" dans votre Ellipse pour le lier à une valeur. –

Questions connexes