簡體   English   中英

WPF-將自定義DataGridTextColumn模板的Content屬性綁定到父級屬性

[英]WPF - Binding custom DataGridTextColumn template's Content property to parent's property

首先,在離開WPF幾年之后,我將重返WPF,我之前對WPF有所了解,並開發了一些窗口,但現在我已經生銹了。 我正在嘗試用過濾器標題構建一個DataGrid,現在我知道沒有為此准備好的控件,需要創建它,而我已經開始使用Template。

我的模板由左側的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>

綁定到DataContext本身:

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

DataGridColumnHeaderDataContextHeader對象本身,即您所用的string

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM