我們正在研究使用通用自定義ContentControl的Silverlight應用程序。這個ContentControl有一個在Generic.xaml中指定的控制模板。獲取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>
繼承的組合框的模板...
<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 //矩形REC = cmbTest.FindName( 「FocusVisualElement」)爲矩形; // cmbTest返回null
如何從ContentControl中的OnApplyTemplate中獲取FocusVisualElement?
希望這是有道理的。
我會繼承文本框,並添加兩個依賴屬性。那麼檢索必要的值並不困難。 – vorrtex 2011-05-07 08:23:23
對此類似的問題... http://stackoverflow.com/questions/4125641/get-nested-control-located-in-controltemplate-in-code-behind – Ewert 2011-05-09 15:40:33