簡體   English   中英

XAML - 如何從 ControlTemplate 中的子控件訪問父控件的 DataTemplate 屬性?

[英]XAML - How do I access a parent control's DataTemplate property from a child in a ControlTemplate?

自定義用戶控件.xaml.cs

public partial class CustomUserControl : UserControl
{
    public CustomUserControl ()
    {
        InitializeComponent();
        var style = (Style)FindResource("Styling");
        Style = style;
    }

    public static readonly DependencyProperty ItemHeaderTemplateProperty = DependencyProperty.Register(nameof(ItemHeaderTemplate), typeof(DataTemplate), typeof(CustomUserControl), new PropertyMetadata(default(DataTemplate)));

    public DataTemplate ItemHeaderTemplate
    {
        get => (DataTemplate)GetValue(ItemHeaderTemplateProperty);
        set => SetValue(ItemHeaderTemplateProperty, value);
    }
}

自定義用戶控件.xaml

 <Style x:Key="Styling" TargetType="{x:Type local:CustomUserControl}">
    <Setter Property="Template">
        <Setter.Value>          
            <ControlTemplate TargetType="{x:Type local:CustomUserControl}">
                
                <!-- This works -->
                <ContentControl ContentTemplate="{TemplateBinding ItemHeaderTemplate}"/>
                
                <TabControl Name="TestName" ItemsSource="{Binding Items}">
                    <TabControl.ContentTemplate>
                        <DataTemplate>

                            <DockPanel>
                                <!-- These don't work -->
                                <ContentControl ContentTemplate="{TemplateBinding ItemHeaderTemplate}"/>
                                <ContentControl ContentTemplate="{Binding ElementName=TestName, Path=DataContext.ItemHeaderTemplate}"/>
                                <ContentControl ContentTemplate="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemHeaderTemplate}"/>
                            </DockPanel>
                        
                        </DataTemplate>
                    </TabControl.ContentTemplate>
                </TabControl>   
            
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

對 TabControl 外部的 ItemHeaderTemplate 的引用工作正常,但對 TabControl 內部的 ItemHeaderTemplate 的引用均無效。

從 ControlTemplate 中的子控件中訪問父控件的屬性的正確方法是什么?

我意識到我自己的問題的答案非常簡單。

我只需要直接設置 ContentTemplate。

<Style x:Key="Styling" TargetType="{x:Type local:CustomUserControl}">
    <Setter Property="Template">
        <Setter.Value>          
            <ControlTemplate TargetType="{x:Type local:CustomUserControl}">
                
                <!-- This works -->
                <ContentControl ContentTemplate="{TemplateBinding ItemHeaderTemplate}"/>
                
                <!-- This now works too -->
                <TabControl ItemsSource="{Binding Items}"
                            ContentTemplate="{TemplateBinding ItemHeaderTemplate}"/>                    
            
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

暫無
暫無

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

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