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;
}