ContentControl.Template即使在XAML中也为null

时间:2012-07-10 10:08:55

标签: c# wpf controltemplate

也许标题让你感到困惑,但问题具体在这里:我有XAML ControlTemplate文件MyType {继承自ContentControl)。在那Template我设置DataContext就像这样:

DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}"

当我想从DataContext获取MyType时,它首次显示为null。点击它(它是窗口中的矩形)后,它会变为对象我需要的东西。我搜索了所有事情,所有事件我在LeftButtonDown中所做的事情没有ApplyTemplate(),UpdateLayout()方法。即使我称这些方法也无济于事。需要做什么? P.S此DataContext是此项目的Parent,我可以发送参数,但必须有其他解决方案

这是模板所在的XAML的一部分:

<Style TargetType="{x:Type s:Connector}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type s:Connector}">
                <Grid Name="grid" DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}">
                    <Border BorderBrush="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, 
                        Path=BorderBrush}" x:Name="border" BorderThickness="2" Background="Transparent">        
                        <Image Source="/DiagramDesigner;component/Resources/1337238611_port.png"/>
                    </Border>
                    <Rectangle Fill="Transparent" Margin="-2"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

这就是我想要获取DataContext的地方:

public DesignerItem ParentDesignerItem // 
    {
        get
        {

            if (parentDesignerItem == null)
            {

                parentDesignerItem = this.DataContext as DesignerItem;
               // if (parentDesignerItem==null) parentDesignerItem = (this.Template.FindName("grid", this) as Grid).DataContext as DesignerItem;
            }

            return parentDesignerItem;
        }
        set
        {

            parentDesignerItem = value;
        }
    }

我必须说Style XAML位于Style DesignerItem {{1}}。

1 个答案:

答案 0 :(得分:0)

问题在于我的算法PS i从SQL恢复一些信息,并且使用空参数再添加2倍Connectors,当我想要访问它时,会给我这些空对象。