2017-07-06 355 views
0

首先,我在回到WPF後幾年將它留在後面,之前我知道一些它,並開發了幾個窗口,但現在我已經生鏽了。 我想構建一個帶有過濾器頭的DataGrid,現在我明白沒有現成的控件,需要創建,我已經開始使用模板。WPF - 將自定義DataGridTextColumn模板的Content屬性綁定到父級的屬性

我的模板由左側的Label控件組成,它包含標題的標題,以及一個DatePick控件,它將作爲我的過濾過程的一部分使用。我想在我的模板中獲取Label.Content屬性來選擇模板父項的DataGridTextColumn.Header屬性值。

我已經嘗試了RelativeSource,TemplatedParent和其他所有的東西,我也找不到在這裏描述類似的問題,我的也沒有解決方案的任何帖子。任何幫助將不勝感激。謝謝。

我的代碼

<UserControl x:Class="CustomControls.ReportsListingControl" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="100" d:DesignWidth="600"> 
<UserControl.Resources> 
    <Style x:Key="ColumnHeaderStyle1" TargetType="{x:Type DataGridColumnHeader}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="DataGridColumnHeader"> 
        <Grid Width="200" Height="35"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*" /> 
          <ColumnDefinition Width="*" /> 
         </Grid.ColumnDefinitions> 
         <Label Grid.Column="0" 
           HorizontalAlignment="Left" 
           VerticalAlignment="Center" 
           Width="50" 
           Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridTextColumn}}, Path=Header}" /> 
         <DatePicker Grid.Column="1" 
            HorizontalAlignment="Right" 
            VerticalAlignment="Center" 
            Width="30" 
            BorderThickness="0" Text="" /> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</UserControl.Resources> 
<Grid> 
    <DataGrid Name="DataGrid1" > 
     <DataGrid.Columns> 
      <DataGridTextColumn HeaderStyle="{StaticResource ColumnHeaderStyle1}" Header="The Text I want displayed in my template label" /> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

回答

1

綁定到DataContext本身:

<Label ... Content="{Binding}" /> 

一個DataGridColumnHeaderDataContextHeader對象本身,即你的情況string

+1

這是令人討厭的簡單。十分感謝你的幫助!!! :) –