我必须在DataGrid列中显示文本和超链接。 为此,我创建了一个带有TextBlock的DataTemplateColumn。 在此文本块中,我使用相应的值填充Inlines属性。 一旦我在网格中向下滚动并且TextBlock不在视线范围内,所有内容都会正确显示,列中最底部的TextBlock将填充上一个相同的内联值。 如果我在网格中禁用虚拟化,一切正常。
如果为此方案创建了一个简短示例。
XAML:
<Window x:Class="TextBlockInDatagridTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TextBlockInDatagridTest"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid AutoGenerateColumns="False" Name="dgHaupt" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Test" Width="150">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Loaded="FrameworkElement_OnLoaded" Tag="{Binding Test}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
代码背后:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<Data> systems = new List<Data>();
for (int i = 0; i < 100; ++i)
{
systems.Add(new Data() { Test = i });
}
this.dgHaupt.ItemsSource = systems;
}
private void FrameworkElement_OnLoaded(object sender, RoutedEventArgs e)
{
TextBlock textBlock = sender as TextBlock;
if (textBlock == null || (int)textBlock.Tag != 7)
{
return;
}
textBlock.Inlines.Clear();
textBlock.Inlines.Add(new Run("test")
{
FontStyle = FontStyles.Italic
});
}
}
struct Data
{
public int Test { get; set; }
}
感谢所有的人。
答案 0 :(得分:0)
您应该禁用虚拟化或在Run
中定义DataTemplate
元素并使用数据绑定:
<DataGrid AutoGenerateColumns="False" Name="dgHaupt" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Test" Width="150">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<Run>
<Run.Style>
<Style TargetType="Run">
<Style.Triggers>
<DataTrigger Binding="{Binding Test}" Value="7">
<Setter Property="Text" Value="Text" />
<Setter Property="FontStyle" Value="Italic" />
</DataTrigger>
</Style.Triggers>
</Style>
</Run.Style>
</Run>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>