【问题标题】:Windows 8 User Controls SampleWindows 8 用户控件示例
【发布时间】:2012-02-11 17:38:20
【问题描述】:

使用 Windows 8 开发者预览版我正在尝试使用我使用内置 Windows Metro 样式模板创建的简单用户控件。 到目前为止,我还无法让我的应用程序解析对控件的引用,即使它与引用它的页面位于同一个项目和命名空间中。我只是得到“找不到类型” 我浏览了“构建”示例,找不到使用用户控件的示例 C# 项目。 有人知道我在哪里可以找到吗?

【问题讨论】:

    标签: c# xaml windows-8 windows-runtime winrt-xaml


    【解决方案1】:

    查看http://asyncui.codeplex.com/SourceControl/changeset/view/7969#139603

    您可以通过右键单击您的项目并选择添加/新项目 (Ctrl+Shift+A) 并从项目模板列表中选择“用户控制”来创建UserControl。然后命名它并最终得到 XAML,您可以修改它以添加更多 UI,如下所示:

    <UserControl
        x:Class="Xyzzer.AsyncUI.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        d:DesignHeight="768"
        d:DesignWidth="1366">
    
        <Grid
            x:Name="LayoutRoot"
            Background="#FF0C0C0C">
            <Grid
                VerticalAlignment="Top"
                Height="140">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition
                        Width="120" />
                    <ColumnDefinition
                        Width="*" />
                </Grid.ColumnDefinitions>
                <Button
                    x:Name="BackButton"
                    IsEnabled="False" />
                <TextBlock
                    x:Name="PageTitle"
                    Text="Some Page!"
                    Grid.Column="1" />
            </Grid>
        </Grid>
    </UserControl>
    

    后面的代码如下:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Windows.Foundation;
    using Windows.UI.Popups;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Data;
    
    namespace Xyzzer.AsyncUI
    {
        partial class MainPage
        {
            public MainPage()
            {
                InitializeComponent();
            }
        }
    }
    

    然后您可以像这样在 XAML 中的其他地方使用该控件:

    <xa:MainPage
        xmlns:xa="using:Xyzzer.AsyncUI" />
    

    【讨论】:

    • 请在此答案中添加信息以使其更易于理解。对我来说,与之前版本的比较并没有突出任何变化。
    • 原始发帖人询问了一个示例 UserControl 实现,我链接到了一个当时似乎让他满意的。不过我可以添加更多细节。
    • 感谢一百万您投入额外的时间!
    【解决方案2】:

    即使用户控件位于同一个命名空间中,您也必须声明命名空间才能在 XAML 中使用它。尝试将属性添加到您的页面元素

    xmlns:uc="YourApplication.Namepace"
    

    以及 XAML 控件的前缀

    <uc:YourUserControl />.  
    

    确保在您不引用用户控件时构建您的项目。用户控件中的错误将导致此问题。

    【讨论】:

      【解决方案3】:

      如果您使用的是 Metro 应用程序的默认项目模板,则页面的命名空间通常命名为本地,它已经在从模板创建的新页面中,如下所示。

      xmlns:local="using:App1"
      

      注意“使用:”是 Metro 应用程序中的新语法。

      所以你可以引用你的用户控件

      <local:MyUserControl1/>
      

      如果您将 MyUserControl 从工具箱拖到 xaml 设计器,所有这些都是自动的。您无需为此编写任何代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-12
        • 2011-11-17
        • 1970-01-01
        相关资源
        最近更新 更多