Avalonia 中的 GetTemplateChild / TemplatePart?
GetTemplateChild / TemplatePart in Avalonia?
在 WPF 中,您将声明 XAML 用于代码隐藏的控件与 TemplatePart,然后使用 GetTemplateChild 获取对这些控件的引用。
你如何在 Avalonia UI 中做到这一点?
在模板中设置控件名称。
<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");
}
}
}
在 WPF 中,您将声明 XAML 用于代码隐藏的控件与 TemplatePart,然后使用 GetTemplateChild 获取对这些控件的引用。
你如何在 Avalonia UI 中做到这一点?
在模板中设置控件名称。
<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");
}
}
}