открытый объект из родительского класса является нулевым в дочернем классе xaml - PullRequest
0 голосов
/ 01 мая 2018

Рассмотрим это просто UserControl MyUserControl1 .xaml:

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Test.CustomControls.MyUserControl1"
x:Name="control" Width="250" Height="100">
    <Grid x:Name="MyGrid" x:FieldModifier="public">
        <TextBlock x:Name="MyTextBox" x:FieldModifier="public" Text="Hello from the other side !!" FontWeight="Light" Foreground="red"/>
    </Grid>
</UserControl>

и это дочерний элемент MyUserControl2.xaml , который в основном просто получен из него, ничего нового:

<local:MyUserControl1
x:Class="Test.CustomControls.MyUserControl2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Test.CustomControls">

</local:MyUserControl1>

Теперь давайте где-нибудь использовать ребенка:

CustomControls.MyUserControl2 control = new CustomControls.MyUserControl2();
MyGrid.Children.Add(control);
control.MyTextBox.Text = "Some text";//NullReferenceException here

и я получаю NullReferenceException, что в основном сообщает мне, что MyTextBox равно нулю !! Что здесь не так?

P.S.

  1. Я уделил достаточно времени этой проблеме и пришел к выводу, что эта проблема возникает, когда я получаю представление xaml из другого представления и пытаюсь получить доступ к внутренним публичным объектам.
  2. И у MyUserControl1.xaml, и у MyUserControl2 есть свой код .cs , и они просто вызывают InitializeComponent(), больше ничего.

1 Ответ

0 голосов
/ 07 мая 2018

Посоветовавшись с моей командой, краткий ответ: не поддерживается .

Похоже, вы хотите сделать визуальное наследование с XAML с использованием пользовательского интерфейса внутри базового файла XAML, который будет использоваться. Для XAML это не поддерживается в почтовом ящике, как это было возможно для Winforms. Вот больше информации об этом наряду с ограничениями: Наследование UserControl # 100 .

Если вы создаете код, завершенный пользовательским элементом управления без XAML, подкласс должен работать хорошо.

...