在自定义布局控件中创建的控件返回Null

时间:2012-07-03 18:10:18

标签: c# wpf xaml silverlight c1richtextbox

我正在尝试创建自己的自定义布局控件,因此我创建了一个UserControl,如下所示:

public partial class KTopContentBottomLayout : UserControl
{
    Orientation _Orientation = Orientation.Vertical;
    public Orientation Orientation { get { return this._Orientation; } set { this._Orientation = value;  } }

    public UIElementCollection Children
    {
        get
        {
            return this.LayoutRoot.Children;
        }
    }

    public KTopContentBottomLayout()
    {
        InitializeComponent();
        CreateProperLayout();
    }
    //Some other code that creates the layouts
}

然后在使用此控件的MainPage.xaml中:

<Grid x:Name="LayoutRoot" Background="White">
    <local:KTopContentBottomLayout Orientation="Vertical" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <local:KTopContentBottomLayout.Children>
            <StackPanel>
                <c1:C1RichTextBoxToolbar  RichTextBox="{Binding ElementName=MyRichTextBox}"/>
            </StackPanel>
                <c1:C1RichTextBox x:Name="MyRichTextBox" ReturnMode="HardLineBreak" />
        </local:KTopContentBottomLayout.Children>
    </local:KTopContentBottomLayout>
</Grid>

到目前为止,一切都正常编译并正确显示。 但是当我尝试在Loaded事件中使用控件时:

void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    this.MyRichTextBox.GotFocus += MyRichTextBox_GotFocus;
    this.MyRichTextBox.LostFocus += MyRichTextBox_LostFocus;
}

MyRichTextBox对象返回null ...

我试图将控件放在我的自定义布局控件之外,并且工作正常。那我做错了什么?

修改

我注意到,如果我通过MyRichTextBox访问KTopContentBottomLayout,我可以正确访问MyRichTextBox

即使用Children.First()等创建属性/ Access

但我不明白为什么如果我MainPage.xaml直接访问MyRichTextBox会给我null。

如果我将KTopContentBottomLayout替换为Grid/StackPanel,他们可以直接访问MyRichTextBox,但原因是什么?

1 个答案:

答案 0 :(得分:0)

尝试将MyRichTextBox置于某种PanelStackPanelGrid等)中。

编辑:实际上,为什么不在StackPanel开头?如果您需要某个层次结构,请为工具栏执行带有嵌套StackPanel的外部StackPanel

另一个编辑:我现在无法将其复制到项目中进行尝试,但行是:this.LayoutRoot.Children返回您认为它的作用?