2010-11-03 37 views
0

我有一個DataTemplate的DataGridTemplateColum至極看起來是這樣的:如何爲DataGridTemplateColumn創建標準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中的文本以及標題中的文本。

到目前爲止,我試圖爲此做一個樣式,但這不起作用,我試圖創建一個用戶控件(但我認爲這就像拿大錘來破解一個螺母)。

所以任何幫助或暗示如何解決這個問題將不勝感激。

+0

http://stackoverflow.com/questions/3044106/wpf-datagridtemplatecolumn-shared-template的副本? – 2012-10-16 02:16:14

回答

1

訪問它,我不明白爲什麼你拒絕的用戶控件的方法。 UserControls非常輕便。它們在運行時增加很少的開銷。當然,它們是您項目中的一個額外功能,但我通常認爲這是一種改進 - WPF項目中包含少量大型Xaml文件通常難以維護。

遠不是'大錘',他們看起來就像我這裏正確的解決方案。

1

添加的DataTemplate到資源,然後通過一個靜態資源

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

以及我的問題是,我有多個colums與文本的綁定不同。但我不能說在DataTemplate Text = {TemplateBinding TextXX} ... – Tokk 2010-11-04 02:14:46

+0

我敢肯定有一種解決方法...例如,你可以使用DataGridTextColumns綁定數據,然後在該列的樣式覆蓋模板使用您自己的DataTemplate並通過RelativeSource訪問綁定。沒有測試語法,但是像'{Binding RelativeSource = {AncestorType = {x:Type DataGridTextColumn}},Path = Binding}'。您也可以在DataGridTemplateColumn上使用自定義的DependencyProperty來存儲綁定,而不是DataGridTextColumn。 – Rachel 2010-11-04 12:15:11

0

如果我理解你,你會嘗試使用不同的數據綁定相同的列模板,並使不同的標題內容與列數據相關。因此,您可以使用「動態XAML」(XAML用於C#代碼 - 這是動態的),它允許您爲一個模板使用不同的數據。

這裏有個簡單的例子。

在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>"; 
     } 

現在您可以發送各種這個函數中的信息作爲文本並獲得相同的模板。您可以從要放入單元的信息中選擇模板。爲此,你必須編寫各種函數來返回各種模板。

相同的方法可以應用於標題模板。