我们正在开发一个使用通用自定义ContentControl的Silverlight应用程序。这个ContentControl在Generic.xaml中指定了一个控件模板。
继承的ContentControl模板...
继承的ComboBox模板...
当ContentControl被实例化时,它的内容被设置为一个(通用的)控件,可以是文本框、下拉列表、标签或日期选择器。
继承的ContentControl模板...
<Style TargetType="local:ExtContentControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:ExtContentControl">
<Border x:Name="content" Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Child="{TemplateBinding Content}">
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
继承的ComboBox模板...
<controltemplate targettype="local:ExtComboBox"></controltemplate>
...
<Rectangle x:Name="FocusVisualElement" IsHitTestVisible="false" Margin="1" Opacity="0" RadiusY="2" RadiusX="2" Stroke="#FF6DBDD1" StrokeThickness="1"/>
当ContentControl被实例化时,它的内容被设置为一个(通用的)控件,可以是文本框、下拉列表、标签或日期选择器。
public class ExtContentControl : ContentControl
{
public ExtContentControl()
{
this.DefaultStyleKey = typeof(ExtContentControl);
RenderControl();
}
private void RenderControl()
{
ExtComboBox extComboBox = new ExtComboBox();
this.Content = extComboBox;
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
Border bor = GetTemplateChild("content") as Border;
ExtComboBox cmbTest = bor.Child as ExtComboBox;
//Find FocusVisualElement from ExtComboBox Control Template
//Rectangle rec = cmbTest.FindName("FocusVisualElement") as Rectangle;
//cmbTest returns null
}
}
正如您在上一条评论中所看到的...
//从ExtComboBox控件模板中查找FocusVisualElement //Rectangle rec = cmbTest.FindName("FocusVisualElement") as Rectangle; //cmbTest返回null
我该如何在ContentControl内部的OnApplyTemplate中获取FocusVisualElement?
希望这样说得通。