Как изменить свойство Content в ContentControl - PullRequest
0 голосов
/ 21 мая 2018

У меня есть пользовательский ContentControl

public class MyContentControl: ContentControl
{....}

с содержимым, определенным в XAML, как это

    <controls:MyContentControl x:Name="myContentControl">
        <controls:MyContentControl.Content>
            <controls:UserControl1 />
        </controls:MyContentControl.Content>
    </controls:MyContentControl>

Содержимое отображается в конструкторе и на устройстве при запуске приложения.Но когда я пытаюсь изменить свойство Content программным способом, например

        UserControl2 control2 = new UserControl2();            
        myContentControl.Content = control2;

MyContentControl ничего не показывает.Использование стандартного ContentControl дает тот же результат.Любые предложения приветствуются.

Ответы [ 3 ]

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

Я следовал вашему коду, чтобы сделать простой пример кода для тестирования.Нет проблем.

public class CustomContentControl:ContentControl
{//......}

<Grid>
    <local:CustomContentControl x:Name="content">
    </local:CustomContentControl>
</Grid>
MyUserControl1 myUserControl1 = new MyUserControl1();
content.Content = myUserControl1;
<UserControl
x:Class="AppContent.MyUserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:AppContent"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">

<Grid>
    <TextBox Text="abc"></TextBox>
</Grid>

Возможно, вы выполнили некоторые настройки в своем коде.Предложение @Martin Zikmund также было разумным.Вы можете обратиться к его предложению и проверить свой код.После этого, если вы все еще не можете решить эту проблему, предоставьте Минимальный, Полный и Проверяемый пример .

enter image description here

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

Хорошо, я узнал, где все пошло не так.Я использую различные элементы управления для настольных и мобильных устройств, поэтому я поместил некоторые из их представлений XAML в папку DeviceFamily-Mobile.Таким образом, они автоматически используют при необходимости.Я перепутал пространства имен, потому что все представления XAML в этой папке имеют корневое пространство имен по причинам доступности.Когда я пытался добавить элемент управления в ContentControl через c #, я не разрешал пространство имен, в котором размещались мои элементы управления.Поэтому я поместил представление XAML как дочерний элемент в ContentControl, и они остались невидимыми, поскольку ни один из них не имеет метода InitializeComponent ().Добавление правильных элементов управления с инициализацией исправило мою проблему.

Я очень благодарен за ваши ответы, они указали мне правильный путь.

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

Это должно работать.Причиной может быть то, что элемент управления не растягивается и отображается размером всего 0x0.Попробуйте установить абсолютные Width и Height на control2 и проверьте, отображается ли он.Вы также можете установить myContentControl.HorizontalContentStretch и myContentControl.VerticalContentStretch.

. Вы можете попробовать запустить приложение в отладчике, а затем использовать Live Property Explorer, чтобы увидеть, каков фактический размер элемента управления внутри Content.

...