我正在尝试创建自己的自定义布局控件,因此我创建了一个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
,但原因是什么?
答案 0 :(得分:0)
尝试将MyRichTextBox
置于某种Panel
(StackPanel
,Grid
等)中。
编辑:实际上,为什么不在StackPanel
开头?如果您需要某个层次结构,请为工具栏执行带有嵌套StackPanel
的外部StackPanel
。
另一个编辑:我现在无法将其复制到项目中进行尝试,但行是:this.LayoutRoot.Children
返回您认为它的作用?