独自のカスタム レイアウト コントロールを作成しようとしているので、次のような 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() などを使用してプロパティ/アクセスを作成します。
MainPage.xaml
しかし、直接アクセスするMyRichTextBox
と null が返される理由がわかりません。
KTopContentBottomLayout
asに置き換えると直接Grid/StackPanel
アクセスできるようMyRichTextBox
になるのですが、その理由は何ですか?