简体   繁体   English

如何在ControlTemplate中引用顶部UIElement?

[英]How do I reference top UIElement in ControlTemplate?

In my custom control I have ControlTemplate propety 在我的自定义控件中,我具有ControlTemplate属性

public ControlTemplate ControlTemplate

It can be something like this: 可能是这样的:

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

I would like to set Canvas 's data context myself rather than doing it in XAML. 我想自己设置Canvas的数据上下文,而不是在XAML中进行设置。

So, If I have ControlTemplate - how do I find first child (Canvas in this case) programmatically? 因此,如果我有ControlTemplate,如何以编程方式找到第一个孩子(在这种情况下为Canvas)?

1) set x:Name attribute for Canvas. 1)为Canvas设置x:Name属性。

2) override OnApplyTemplate. 2)覆盖OnApplyTemplate。

3) use (Canvas)GetTemplateChild("CanvasName") for get Canvas. 3)使用(Canvas)GetTemplateChild(“ CanvasName”)获取画布。

ofcourse this class should inherit from Control. 当然,此类应从Control继承。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM