C# WPF无法在DataGridTemplateColumn中显示椭圆
我在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 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
}