C# 更新控制模板';从Thumb控件的子类中删除控件文本

C# 更新控制模板';从Thumb控件的子类中删除控件文本,c#,wpf,user-controls,controltemplate,C#,Wpf,User Controls,Controltemplate,我有一个类继承了Thumb(为了简洁起见被截断): 我有一个ControlTemplate,如下所示: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ControlTemplate x:Key="MyControlTemplate">

我有一个类继承了
Thumb
(为了简洁起见被截断):

我有一个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>
但是,文本“MyText”不会显示在文本块中。我缺少什么?

方法将模板的内容作为单独的实例加载。这不是你想要的。您想设置应用于
MyControl
实例的
TextBlock
Text
属性:

public System.Windows.UIElement Create()
{
    MyControl control = new MyControl();
    var template = Application.Current.Resources["MyControlTemplate"] as ControlTemplate;
    control.Template = template;
    control.ApplyTemplate();

    var border = (Border)VisualTreeHelper.GetChild(control, 0);
    var panel = (StackPanel)VisualTreeHelper.GetChild(border, 0);
    foreach (var textBlock in panel.Children.OfType<TextBlock>())
    {
        switch (textBlock.Name)
        {
            case "controlType":
                textBlock.Text = "MyText";
                textBlock.InvalidateVisual();
                break;
        }
    }
    return control;
}
public System.Windows.ui元素创建()
{
MyControl control=新的MyControl();
var template=Application.Current.Resources[“MyControlTemplate”]作为ControlTemplate;
control.Template=Template;
control.ApplyTemplate();
var border=(border)VisualTreeHelper.GetChild(控件,0);
var panel=(StackPanel)visualtreeheloper.GetChild(border,0);
foreach(panel.Children.OfType()中的var textBlock)
{
开关(textBlock.Name)
{
案例“controlType”:
textBlock.Text=“MyText”;
textBlock.InvalidateVisual();
打破
}
}
返回控制;
}

所以,无论谁投了反对票,都要让问题的负责人知道你为什么这么做。因为你的生活很悲惨,所以你不能否决投票。谢谢,@mm8。我现在不在城里;我回来后会试试的。
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;
}
public System.Windows.UIElement Create()
{
    MyControl control = new MyControl();
    var template = Application.Current.Resources["MyControlTemplate"] as ControlTemplate;
    control.Template = template;
    control.ApplyTemplate();

    var border = (Border)VisualTreeHelper.GetChild(control, 0);
    var panel = (StackPanel)VisualTreeHelper.GetChild(border, 0);
    foreach (var textBlock in panel.Children.OfType<TextBlock>())
    {
        switch (textBlock.Name)
        {
            case "controlType":
                textBlock.Text = "MyText";
                textBlock.InvalidateVisual();
                break;
        }
    }
    return control;
}