初始化类之后,template属性返回正确的值,但在构造函数中它始终返回null。我试图在构造函数中调用ApplyTemplate()
方法,但它不起作用。
谁能解释为什么会发生这种情况?
是否可以正确获取构造函数中的模板属性?
提前谢谢!
风格
<Style x:Key="DesignerItemStyle" TargetType="{x:Type dataModel:Component}">
<Style.Resources>
<converter:ComponentHeightConverter x:Key="componentHeightConverter"/>
</Style.Resources>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
<Setter Property="MinWidth" Value="10"/>
<Setter Property="MinHeight" Value="10"/>
<Setter Property="Height" Value="5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type dataModel:Component}">
<StackPanel Orientation="Vertical" DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}">
<Grid x:Name="PART_MainGrid">
<!-- PART_ContentPresenter -->
<ContentPresenter x:Name="PART_ContentPresenter"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Content="{TemplateBinding ContentControl.Content}"
Margin="{TemplateBinding ContentControl.Padding}"
Cursor="Arrow"/>
<!-- PART_ResizeDecorator -->
<Control x:Name="PART_ResizeDecorator"
Visibility="Collapsed"
Template="{StaticResource ResizeDecoratorTemplate}"/>
<!-- PART_DragThumb -->
<c:DragThumb x:Name="PART_DragThumb"
Template="{StaticResource MoveThumbTemplate}"
ToolTip="{Binding ToolTip}"
Cursor="SizeAll"/>
<c:RelativePositionPanel x:Name="PART_ConnectorNames"
Visibility="{Binding Path=(viewModel:ToolbarViewModel.IsPortLabelVisible),
Converter={StaticResource BooleanToVisibilityConverter}}"/>
<!-- PART_ConnectorDecorator -->
<Control x:Name="PART_ConnectorDecorator"
Visibility="Visible" Panel.ZIndex="1000"
Template="{StaticResource ConnectorDecoratorTemplate}"/>
</Grid>
<TextBlock x:Name="PART_NameBlock"
HorizontalAlignment="Center" Visibility="{Binding Path=(viewModel:ToolbarViewModel.IsComponentLabelVisible), Converter={StaticResource BooleanToVisibilityConverter}}"
TextTrimming="CharacterEllipsis" Text="{Binding DisplayedName}" Grid.Row="1">
<TextBlock.RenderTransform>
<TranslateTransform X="5" Y="5"/>
</TextBlock.RenderTransform>
</TextBlock>
</StackPanel>
<ControlTemplate.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Value="True" Binding="{Binding RelativeSource={RelativeSource Self},Path=IsSelected}"/>
<Condition Value="{x:Static sys:Guid.Empty}" Binding="{Binding RelativeSource={RelativeSource Self},Path=ParentID}"/>
</MultiDataTrigger.Conditions>
<Setter TargetName="PART_ResizeDecorator" Property="Visibility" Value="Visible"/>
</MultiDataTrigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="PART_ConnectorDecorator" Property="Visibility" Value="Visible"/>
<Setter TargetName="PART_DragThumb" Property="Visibility" Value="Visible"/>
</Trigger>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="PART_DragThumb" Property="Visibility" Value="Visible"/>
</Trigger>
<DataTrigger Value="True" Binding="{Binding RelativeSource={RelativeSource Self},Path=IsDragConnectionOver}">
<Setter TargetName="PART_ConnectorDecorator" Property="Visibility" Value="Visible"/>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
具体类
public Component()
{
var template = this.Template; //Here template property returns null
}
答案 0 :(得分:1)
您可以在此方法中覆盖OnApplyTemplate方法和访问模板。
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
var template = Template; // template is not null here
}
答案 1 :(得分:0)
您可以在访问 Template 属性之前调用 UpdateDefaultStyle()方法。 例如:
var button= new Button();
button.UpdateDefaultStyle();
button.Template // template is not null here