【问题标题】:XAML - How do I access a parent control's DataTemplate property from a child in a ControlTemplate?XAML - 如何从 ControlTemplate 中的子项访问父控件的 DataTemplate 属性?
【发布时间】:2021-12-12 23:46:15
【问题描述】:

CustomUserControl.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);
    }
}

CustomUserControl.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 的子控件中访问父控件属性的正确方法是什么?

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    我意识到我自己的问题的答案很简单。

    我只需要直接设置 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>
    

    【讨论】:

      猜你喜欢
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多