Avalonia 中的 GetTemplateChild / TemplatePart?

Posted

技术标签:

【中文标题】Avalonia 中的 GetTemplateChild / TemplatePart?【英文标题】:GetTemplateChild / TemplatePart in Avalonia? 【发布时间】:2021-12-27 00:00:03 【问题描述】:

在 WPF 中,您将声明 XAML 控件以供 TemplatePart 代码隐藏使用,然后使用 GetTemplateChild 获取对这些控件的引用。

您如何在 Avalonia UI 中实现这一点?

【问题讨论】:

【参考方案1】:

在模板中设置控件名称。

<Styles xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:controls="using:Sample.Controls">
  <Style Selector="controls|TestControl">
    <Setter Property="Template">
      <ControlTemplate>
        <TextBlock Name="PART_TextBlock" Text="Templated Control" />
      </ControlTemplate>
    </Setter>
  </Style>
</Styles>

在覆盖 OnApplyTemplate 时使用 e.NameScope.Find(...)

using Avalonia.Controls;
using Avalonia.Controls.Primitives;

namespace Sample.Controls

    public class TestControl : TemplatedControl
    
        protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
        
            base.OnApplyTemplate(e);

            var tb = e.NameScope.Find<TextBlock>("PART_TextBlock");
        
    

【讨论】:

以上是关于Avalonia 中的 GetTemplateChild / TemplatePart?的主要内容,如果未能解决你的问题,请参考以下文章

Avalonia:如何使用代码为路径中的点设置动画

在 Avalonia 类库中的何处加载 ContentControl 样式?

Avalonia 中的 GetTemplateChild / TemplatePart?

Slider.IsMoveToPointEnabled 在 Avalonia

如何为 Avalonia 中的每个平台/操作系统定义一组单独的样式?

在 Avalonia 用户控件中未触发鼠标事件