C # UWP не может отображать usercontrol с кодом

#c# #xaml #uwp #user-controls

#c# #xaml #uwp #пользовательские элементы управления

Вопрос:

Я создал Usercontrol с помощью C # UWP, поэтому, если я создам свой Usercontrol с помощью Xaml на своей главной странице.Xaml я вижу это. Но если я создам его в своем MainPage.xaml.cs с помощью кода на C #, я его не увижу. Я думаю, что я что-то забыл в MainPage.xaml.cs, когда я создаю свой элемент управления.

Я был бы рад, если у кого-нибудь есть решение моей проблемы: D

MyControl.xaml:

 <UserControl
    x:Class="CustomControlTest.MyControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:CustomControlTest"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" Height="32.06" Width="53.254">

    <Grid>
        <Button Content="Hello" Background="Green" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Top"/>
    </Grid>
</UserControl>
 

MyControl.xaml.cs:

 namespace CustomControlTest
{
    public sealed partial class MyControl : UserControl
    {
        public MyControl()
        {
            this.InitializeComponent();
        }
    }
}
 

MainPage.xaml:

 <Page
    x:Class="CustomControlTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:CustomControlTest"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <!--<local:MyControl/>-->
    </Grid>
</Page>
 

MainPage.xaml.cs:

 namespace CustomControlTest
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();

            MyControl mc = new MyControl();
            mc.HorizontalAlignment = HorizontalAlignment.Stretch;
            mc.VerticalAlignment = VerticalAlignment.Stretch;
        }
    }
}
 

Ответ №1:

Я создал Usercontrol с помощью C # UWP, поэтому, если я создам свой Usercontrol с помощью Xaml на своей главной странице.Xaml я вижу это. Но если я создам его в своем MainPage.xaml.cs с помощью кода на C #, я его не увижу

Проблема в вашем MainPage.cs конструкторе:

 public MainPage()
{
   this.InitializeComponent();

   MyControl mc = new MyControl();
   mc.HorizontalAlignment = HorizontalAlignment.Stretch;
   mc.VerticalAlignment = VerticalAlignment.Stretch;
}
 

Вы создаете новый экземпляр MyControl , но вы никогда не добавляете этот экземпляр в свой MainPage экземпляр. После создания экземпляра и настройки того, что вам нужно, вам нужно добавить этот элемент управления в другой контейнер.

Сначала дайте вашему Grid элементу имя в MainPage.xaml :

  <Page
    x:Class="CustomControlTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:CustomControlTest"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid Name="myGrid">
        <!--<local:MyControl/>-->
    </Grid>
 </Page>
 

Затем вы можете сослаться на это Grid в своем коде и добавить MyControl к этому свой новый экземпляр Grid :

 public MainPage()
{
   this.InitializeComponent();

   MyControl mc = new MyControl();
   mc.HorizontalAlignment = HorizontalAlignment.Stretch;
   mc.VerticalAlignment = VerticalAlignment.Stretch;

   // Add new instance of MyControl (mc) to grid control
   myGrid.Children.Add(mc);
}