Wpf 在DataGridTemplateColumn标头中添加图像和textblock控件
在我们的WPF应用程序中,我们有一个显示网格的屏幕,现在列的标题是文本,我应该在文本旁边添加一个图像。这是XAML代码Wpf 在DataGridTemplateColumn标头中添加图像和textblock控件,wpf,xaml,c#-4.0,wpfdatagrid,Wpf,Xaml,C# 4.0,Wpfdatagrid,在我们的WPF应用程序中,我们有一个显示网格的屏幕,现在列的标题是文本,我应该在文本旁边添加一个图像。这是XAML代码 <Custom:DataGrid.Columns> <Custom:DataGridTemplateColumn Header="{Binding EmailIDHeader, Source={StaticResource LiteralDictionary}}" Width = "0.1*" CellTemplate="{StaticResou
<Custom:DataGrid.Columns>
<Custom:DataGridTemplateColumn Header="{Binding EmailIDHeader, Source={StaticResource LiteralDictionary}}" Width = "0.1*" CellTemplate="{StaticResource EmailIDTemplate}" SortMemberPath="EmailID"/>
</Custom:DataGrid.Columns>
<DataTemplate x:Key="EmailIDTemplate">
<Grid MinWidth="10" Margin="5,0,5,0">
<TextBlock HorizontalAlignment="Left" Text="{Binding customerItem.EmailID}" Margin="0,0,3,0"/>
</Grid>
EMailIDHeader将加载标题的文本值,我必须在其旁边添加一个图像。我如何做到这一点?我尝试了给出的解决方案。但这只是显示了一个空的标题列。定义一个
数据模板
,在这里您可以根据需要组织文本块和图像,并使用此资源设置属性HeaderTemplate
标题的数据模板:
<DataTemplate x:Key="EmailIDHeaderTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Image Source="SPhotoEditor-20170120_075433.jpg" Width="20" Height="20"></Image>
<TextBlock HorizontalAlignment="Left" Text="{Binding EmailIDHeader, Source={StaticResource LiteralDictionary}}" Margin="0,0,3,0"/>
</Grid>
</DataTemplate>
对于单元:
<DataTemplate x:Key="EmailIDTemplate">
<Grid MinWidth="10" Margin="5,0,5,0">
<TextBlock HorizontalAlignment="Left" Text="{Binding customerItem.EmailID}" Margin="0,0,3,0"/>
</Grid>
</DataTemplate>
您的网格:
<Custom:DataGrid.Columns>
<Custom:DataGridTemplateColumn HeaderTemplate="{StaticResource EmailIDHeaderTemplate}" CellTemplate="{StaticResource EmailIDTemplate}" Width = "0.1*" SortMemberPath="EmailID"/>
</Custom:DataGrid.Columns>
定义一个
DataTemplate
,您可以在其中根据需要组织文本块和图像,并使用此资源设置属性HeaderTemplate
标题的数据模板:
<DataTemplate x:Key="EmailIDHeaderTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Image Source="SPhotoEditor-20170120_075433.jpg" Width="20" Height="20"></Image>
<TextBlock HorizontalAlignment="Left" Text="{Binding EmailIDHeader, Source={StaticResource LiteralDictionary}}" Margin="0,0,3,0"/>
</Grid>
</DataTemplate>
对于单元:
<DataTemplate x:Key="EmailIDTemplate">
<Grid MinWidth="10" Margin="5,0,5,0">
<TextBlock HorizontalAlignment="Left" Text="{Binding customerItem.EmailID}" Margin="0,0,3,0"/>
</Grid>
</DataTemplate>
您的网格:
<Custom:DataGrid.Columns>
<Custom:DataGridTemplateColumn HeaderTemplate="{StaticResource EmailIDHeaderTemplate}" CellTemplate="{StaticResource EmailIDTemplate}" Width = "0.1*" SortMemberPath="EmailID"/>
</Custom:DataGrid.Columns>
假设模型是
public class Model : INotifyPropertyChanged
{
string _value;
public string Value{ get { return _value; } set { _value = value; RaisePropertyChanged("Value"); } }
public event PropertyChangedEventHandler PropertyChanged;
void RaisePropertyChanged(string propname)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propname));
}
}
视图模型中有两个属性:
string _name;
public string Name { get { return _name; } set { _name = value; RaisePropertyChanged("Name"); } }
string _imagePath;
public string ImagePath { get { return _imagePath; } set { _imagePath = value; RaisePropertyChanged("ImagePath"); } }
您可以使用以下视图:
<DataGrid DataContext="{Binding}" ItemsSource="{Binding Models}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.Name}"/>
<Image Source="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.ImagePath}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Value}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
假设模型是
public class Model : INotifyPropertyChanged
{
string _value;
public string Value{ get { return _value; } set { _value = value; RaisePropertyChanged("Value"); } }
public event PropertyChangedEventHandler PropertyChanged;
void RaisePropertyChanged(string propname)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propname));
}
}
视图模型中有两个属性:
string _name;
public string Name { get { return _name; } set { _name = value; RaisePropertyChanged("Name"); } }
string _imagePath;
public string ImagePath { get { return _imagePath; } set { _imagePath = value; RaisePropertyChanged("ImagePath"); } }
您可以使用以下视图:
<DataGrid DataContext="{Binding}" ItemsSource="{Binding Models}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.Name}"/>
<Image Source="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.ImagePath}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Value}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
共享您尝试的EmailIDTemplate
代码。共享您尝试的EmailIDTemplate
代码。此操作无效,标题为空。我试着在里面放置两个文本块而不是图像,但也没有出现:(为什么在控件前面有一个somme“Custom”标记。它们是从Datagrid和DataGridTemplatecolumn继承的自定义控件吗?因为在一个标准的数据网格中,它就像一个符咒一样工作(我在发布之前已经实现了我提供的代码)这不起作用,标题是空的。我尝试在其中放置两个文本块而不是图像,但也没有成功:(为什么在控件前面有一个“自定义”标记。它们是从Datagrid和DataGridTemplatecolumn继承的某种自定义控件吗?因为在标准数据网格中,它就像一个符咒一样工作(我已经实现了发布前提供的代码)