我有一个继承Thumb
的类(为简洁而截断):
public class MyControl : Thumb
{
public MyControl()
: base()
{
this.MinWidth = 80;
this.MinHeight = 60;
/* ... */
}
}
我有一个ControlTemplate,如下所示:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ControlTemplate x:Key="MyControlTemplate">
<Border BorderBrush="Black" BorderThickness="1" Name="border">
<StackPanel>
<StackPanel.Background>
<SolidColorBrush Color="White" Opacity="1"/>
</StackPanel.Background>
<TextBlock Name="controlType" Padding="5,0,5,3" HorizontalAlignment="Stretch" TextAlignment="Center">
<TextBlock.Background>
<SolidColorBrush Color="#FFC0C0C0" Opacity="1"/>
</TextBlock.Background>
</TextBlock>
</StackPanel>
</Border>
</ControlTemplate>
我在另一个类中实例化MyControl
的实例,并尝试在模板中设置Text
TextBlock控件的controlType
属性。
public System.Windows.UIElement Create()
{
MyControl control = new MyControl();
var template = Application.Current.Resources["MyControlTemplate"] as ControlTemplate;
var contents = template.LoadContent();
var panel = (StackPanel)VisualTreeHelper.GetChild(contents, 0);
foreach (var textBlock in panel.Children.OfType<TextBlock>())
{
switch (textBlock.Name)
{
case "controlType":
textBlock.Text = "MyText";
textBlock.InvalidateVisual();
break;
}
}
control.Template = template;
control.UpdateLayout();
return control;
}
但是,文本“MyText”未显示在TextBlock中。我错过了什么?
答案 0 :(得分:1)
LoadContent()
方法将模板的内容作为单独的实例加载。这不是你想要的。您想要设置应用于Text
实例的TextBlock
的{{1}}属性:
MyControl