#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);
}