我为DataGridTemplateColum提供了一个DataTemplate,如下所示:
<toolkit:DataGridTemplateColumn x:Name="DataGridTextColumnIstVorvorjahr" IsReadOnly="True" SortMemberPath="SummeIstVorvorjahr">
<toolkit:DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<Grid HorizontalAlignment="Stretch" Background="Transparent" Margin="0,-5">
<DockPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<TextBlock Panel.ZIndex="100" Style="{DynamicResource CellText}" Text="{Binding Path=SummeIstVorvorjahrGerundet, Converter={StaticResource numberFormatter}, ConverterParameter='#,0.0 T€'}" DockPanel.Dock="Right"/>
<Image Panel.ZIndex="90" DockPanel.Dock="Left" MouseLeftButtonUp="FilterDataGridAnalyse_MouseDoubleClick" HorizontalAlignment="Left" Margin="5,0,0,0" Width="20" Height="20" Visibility="Hidden" Name="ImageNormal" Source="pack://application:,,,/Cis.Common.Presentation;component/Resources/Images/Lupe.png" />
</DockPanel>
</Grid>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="ImageNormal" Property="Visibility" Value="Visible" />
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
<toolkit:DataGridTemplateColumn.HeaderTemplate>
<DataTemplate >
<DockPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch" LastChildFill="False">
<TextBlock x:Name="TextBlockHeaderZeile1" Text="Ist" DockPanel.Dock="Top" />
<WrapPanel DockPanel.Dock="Top">
<TextBlock x:Name="TextBlockHeaderZeile2" Text=""/>
<ContentPresenter x:Name="contentPresenter">
<ContentPresenter.Content>
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Content" />
</ContentPresenter.Content>
</ContentPresenter>
</WrapPanel>
<Border Style="{DynamicResource borderline}">
<TextBlock VerticalAlignment="Stretch" x:Name="TextBlockSumme" Text="{Binding Path=KumulierteSummeIstVorvorjahr, Converter={StaticResource numberFormatter}, ConverterParameter='#,0.0 T€', RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type cis:ChildWindow}}}"
/>
</Border>
</DockPanel>
</DataTemplate>
</toolkit:DataGridTemplateColumn.HeaderTemplate>
</toolkit:DataGridTemplateColumn>
现在我想为这个类型创建一个StandartTemplate,因为我有很多像这样的Colums,只是在colums和header中的文本绑定方面有所不同。
到目前为止,我已尝试为此制作样式,但这不起作用,我尝试创建一个用户控件(但我认为这就像用大锤敲打坚果一样)。
所以任何帮助或暗示如何解决这个问题将不胜感激。
答案 0 :(得分:1)
将DataTemplate添加到Resources中,然后通过StaticResource
访问它<Window>
<Window.Resources>
<DataTemplate x:Key="MyColumnTemplate">
...
</DataTemplate>
<DataTemplate x:Key="MyColumnTemplateHeader">
...
</DataTemplate>
</Window.Resources>
...
<toolkit:DataGridTemplateColumn x:Name="DataGridTextColumnIstVorvorjahr" IsReadOnly="True" SortMemberPath="SummeIstVorvorjahr"
CellTemplate={StaticResource MyColumnTemplate}
HeaderTemplate={StaticResource MyColumnTemplateHeader}
...
</Window>
答案 1 :(得分:1)
我不明白为什么你拒绝了UserControl方法。 UserControls非常轻量级。它们在运行时增加了很少的开销。它们当然是你项目中的一个额外功能,但我通常发现这是一个改进 - 带有少量大型Xaml文件的WPF项目通常难以维护。
它们不仅仅是一个“大锤”,它对我来说似乎是正确的解决方案。
答案 2 :(得分:0)
如果我理解您,您尝试使用不同的数据绑定相同的列模板,并使列标题的内容与列数据相关。因此,您可以使用“动态XAML”(C#代码中使用的XAML - 动态),它允许您将一个模板用于不同的数据。
这是一个简单的例子。
在C#代码中,我们创建了DataGridTemplateColumn对象:
DataGridTemplateColumn tc = new DataGridTemplateColumn();
然后我们使用模板设置CellTemplate属性,该模板是在特殊函数中动态创建的:
tc.CellTemplate = (DataTemplate)XamlReader.Parse(GetTextCellDataTemplate(someText));
这是一个创建模板的特殊功能:
public static string GetTextCellDataTemplate(string bindingPath)
{
return @"
<DataTemplate
xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" >
<ScrollViewer MaxHeight=""200"" MaxWidth=""250"" VerticalScrollBarVisibility=""Auto"">
<TextBlock Text=""{Binding Path=" + bindingPath + @"}""
TextWrapping=""Wrap"" />
</ScrollViewer>
</DataTemplate>";
}
现在您可以将此功能中的各种信息作为文本发送并获取相同的模板。您可以从要放入单元格的信息中选择模板。为此,您必须编写各种函数,它们将返回各种模板。
可以将相同的方法应用于标题模板。