C# UWP 无法用代码显示用户控件

Posted

技术标签:

【中文标题】C# UWP 无法用代码显示用户控件【英文标题】:C# UWP can't display usercontrol with code 【发布时间】:2021-06-06 17:50:43 【问题描述】:

我使用 C# UWP 创建了一个用户控件,因此如果我在 MainPage.Xaml 中使用 Xaml 创建用户控件,我可以看到它。 但是,如果我使用 C# 代码在 MainPage.xaml.cs 中创建它,我将看不到它。我想我在创建控件时忘记了 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】:

我使用 C# UWP 创建了一个用户控件,因此如果我在 MainPage.Xaml 中使用 Xaml 创建用户控件,我可以看到它。但是,如果我使用 C# 代码在 MainPage.xaml.cs 中创建它,我将看不到它

问题出在您的 MainPage.cs 构造函数中:

public MainPage()

   this.InitializeComponent();

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

您创建了一个MyControl 的新实例,但您从未将此实例添加到您的MainPage 实例中。构建实例并设置好所需的内容后,需要将此控件添加到另一个容器中。

首先,在MainPage.xaml 中为您的Grid 元素命名:

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

【讨论】:

以上是关于C# UWP 无法用代码显示用户控件的主要内容,如果未能解决你的问题,请参考以下文章

从代码隐藏(C#、WPF)添加时,用户控件无法在 ListBox 中正确显示

UWP 从 TemplateSelector 更改为用户控件不再显示绑定

win10 uwp 验证输入 自定义用户控件

2019-11-29-win10-uwp-如何判断一个控件在滚动条的里面是用户可见

在 WPF C# 中无法访问用户控件的自定义属性

如何从代码隐藏c#中显示隐藏的div