안녕하세요 이것은 How to access a named element of a derived user control in silverlight?과 비슷하지만 차이점은 사용자 정의 컨트롤이 아닌 템플릿 컨트롤에서 상속됩니다.템플릿 컨트롤에서 상속 한 컨트롤에서 명명 된 요소에 액세스하는 방법
<Style TargetType="Problemo:MyBaseControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Problemo:MyBaseControl">
<Grid x:Name="LayoutRoot" Background="White">
<Border Name="HeaderControl" Background="Red" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
코드 : - - :
나는XAML MyBaseControl라는 템플릿 제어 할 수 있습니다
public class MyBaseControl : Control
{
public UIElement Header { get; set; }
public MyBaseControl()
{
DefaultStyleKey = typeof(MyBaseControl);
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
var headerControl = GetTemplateChild("HeaderControl") as Border;
if (headerControl != null)
headerControl.Child = Header;
}
}
나는
MyBaseControl Control에서 상속 myControl라는 또 다른 제어 할 수 있습니다 Xaml : -
<me:MyBaseControl x:Class="Problemo.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:me="clr-namespace:Problemo"
d:DesignHeight="300" d:DesignWidth="400">
<me:MyBaseControl.Header>
<TextBlock Name="xxx" />
</me:MyBaseControl.Header>
</me:MyBaseControl>
코드 : -
public partial class MyControl : MyBaseControl
{
public string Text { get; set; }
public MyControl(string text)
{
InitializeComponent();
Text = text;
Loaded += MyControl_Loaded;
}
void MyControl_Loaded(object sender, RoutedEventArgs e)
{
base.ApplyTemplate();
xxx.Text = Text;
}
}
문제는 XXX입니다 null입니다. 코드에서 xxx 컨트롤에 액세스하려면 어떻게합니까?
은 OnApplyTemplate 재정의에서도 xxx == null입니다. –