C# WPF无法在DataGridTemplateColumn中显示椭圆

C# WPF无法在DataGridTemplateColumn中显示椭圆,c#,wpf,wpfdatagrid,ellipse,datagridtemplatecolumn,C#,Wpf,Wpfdatagrid,Ellipse,Datagridtemplatecolumn,我在DataGridTemplateColumn中有一个椭圆,它绑定到的数据在下一列中正确显示,但我的椭圆列始终为空,没有显示任何内容 <DataGridTemplateColumn CanUserResize="False" Header="StateEllipse"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel>

我在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}" />
显示状态值的第二列是ok,但第一列带有椭圆的列始终为空

转换器从未被调用,因此绑定从未被绑定。

有人有主意/建议吗


谢谢。

看起来您无法设置椭圆的大小


您必须设置其宽度和高度属性,以便它显示我相信…

看起来您无法设置椭圆的大小


您必须设置它的宽度和高度属性,以便它显示我相信…

我刚刚尝试重新创建您的问题,但在我的情况下,它工作得很好。请看下面

<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>

公共部分类主窗口:窗口
{
公共主窗口()
{
DataContext=this;
初始化组件();
Items=新的ObservableCollection();
对于(int i=0;i<100;i++)
{
项目.添加(i);
}
}
公共可观测收集项目
{
get{return(ObservableCollection)GetValue(ItemsProperty);}
set{SetValue(ItemsProperty,value);}
}
公共静态只读从属属性ItemsProperty=
DependencyProperty.Register(“项”)、typeof(ObservableCollection)、typeof(MainWindow));
}
[值转换(类型化(int)、类型化(画笔))]
公共密封类StateToBrush:IValueConverter
{
#区域转换器成员
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
Color stateColor=颜色。黄色;
开关((int)值)
{
案例0:
stateColor=颜色。绿色;
打破
案例1:
stateColor=颜色。红色;
打破
}
返回新的SolidColorBrush(stateColor);
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
抛出新的NotImplementedException();
}
#端区
}

我刚刚尝试重新创建您的问题,但在我的情况下,效果很好。请看下面

<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>

公共部分类主窗口:窗口
{
公共主窗口()
{
DataContext=this;
初始化组件();
Items=新的ObservableCollection();
对于(int i=0;i<100;i++)
{
项目.添加(i);
}
}
公共可观测收集项目
{
get{return(ObservableCollection)GetValue(ItemsProperty);}
set{SetValue(ItemsProperty,value);}
}
公共静态只读从属属性ItemsProperty=
DependencyProperty.Register(“项”)、typeof(ObservableCollection)、typeof(MainWindow));
}
[值转换(类型化(int)、类型化(画笔))]
公共密封类StateToBrush:IValueConverter
{
#区域转换器成员
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
Color stateColor=颜色。黄色;
开关((int)值)
{
案例0:
stateColor=颜色。绿色;
打破
案例1:
stateColor=颜色。红色;
打破
}
返回新的SolidColorBrush(stateColor);
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
抛出新的NotImplementedException();
}
#端区
}

尝试设置椭圆的默认大小这对您来说很有用。您可以显示XAML来定义包含转换器的StateToBrush资源吗?尝试设置椭圆的默认大小这对您来说很有用。您可以显示XAML来定义包含转换器的StateToBrush资源吗?我添加了“Width=“10”Height=“10”,椭圆仍然不可见。我添加了“Width=“10”Height=“10”,椭圆仍然不可见。我的转换器代码中有一个断点,但它从未到达那里。因此,转换器从未被称为?!您似乎缺少椭圆中的“Path=”以将其绑定到值。我在转换器的代码中有一个断点,但它从未到达那里。因此,转换器从未被称为?!您似乎缺少椭圆中用于将其绑定到值的“Path=”。
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
}