如何在ControlTemplate中引用顶级UIElement?

时间:2014-10-21 00:46:05

标签: c# xaml silverlight controltemplate

在我的自定义控件中,我有ControlTemplate propety

public ControlTemplate ControlTemplate

可能是这样的:

<map:IdattMapLayer.ControlTemplate>
    <ControlTemplate>
        <Canvas
            DataContext="{Binding
                Converter={StaticResource ObjectToTrackedAssetConverter}}">
            <Button                                
                Style="{StaticResource LooklessButtonStyle}"
                Width="{Binding PushpinWidth}" Height="{Binding PushpinWidth}"
                Margin="{Binding PushpinMargin}"
                Command="{Binding
                    Path=DataContext.SelectedPushpinChangedCommand,
                    ElementName=LayoutRoot}"
                CommandParameter="{Binding}"
                Cursor="Hand">
                <Ellipse
                  Width="{Binding PushpinWidth}"
                  Height="{Binding PushpinWidth}"
                  Stroke="Black"
                  Fill="{Binding IsGPSDataRecent,
                      Converter={StaticResource BoolToGreenRedBrushConverter}}"
                  StrokeThickness="1">
                </Ellipse>
            </Button>
        </Canvas>
    </ControlTemplate>
</map:IdattMapLayer.ControlTemplate>

我想自己设置Canvas的数据上下文,而不是在XAML中进行。

那么,如果我有ControlTemplate - 如何以编程方式找到第一个子节点(在本例中为Canvas)?

1 个答案:

答案 0 :(得分:1)

1)为Canvas设置x:Name属性。

2)覆盖OnApplyTemplate。

3)使用(Canvas)GetTemplateChild(&#34; CanvasName&#34;)获取Canvas。

当然这个类应该继承自Control。