Windows Phone 8.1中自定义用户控件及如何调用用户控件

对于有些强迫症的我,还是作为程序员,在自己编程的世界里,凡事都要按照自己的意愿来安排布局或者设计动画等

等。虽说微软已经给我们封装了太多太多的控件和模板,但是难免有时候不会符合我们的意愿和要求,在这个时候就

需要我们自己来设计用户自定义控件。

首先需要在VS中创建自定义控件,所以需要在项目名右击->添加->新建项->选择User Control(用户控件)->添加

结合之前一篇提及到的XAML语法和开头的定义的说明,这边借自定义用户控件和引用自定义控件进一步说明。

之前博客中见到XAML开头定义的各种说明链接:Windows Phone 8.1中的.xaml文件开头那些奇怪的定义

自定义控件的XAML代码:

<UserControl

x:Class="App1.StackPanelByMyself"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:local="using:App1"

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">

项目名称:App1,自定义控件文件名称:StackPanelByMyself

所以看出类的定义 x:Class="App1.StackPanelByMyself",说明自定义控件StackPanelByMyself类在App1空间中

而xmlns:local="using:App1"表示local即为App1的命名空间,所以可以得出结论StackPanelByMyself类就在local

命名空间中。

在另外一个文件UserControlDemo中引用自定义控件

<Page

x:Class="App1.UserControlDemo"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:local="using:App1"

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:StackPanelByMyself x:Name="stackPanelByMyself" FontSize="30">

</local:StackPanelByMyself>

</Grid>

</Page>

结合上方标红的文字说明和<local:StackPanelByMyself>这种写法,自定义控件的引用和命名空间就可以理解了。

下面是林政老师出版的书中关于自定义控件的例子,大家可以研究一下:

自定义控件XAML代码:

<UserControl
    x:Class="App1.StackPanelByMyself"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    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>
        <ScrollViewer>
            <StackPanel x:Name="stackPanel" Orientation="Vertical" />
        </ScrollViewer>
    </Grid>
</UserControl>

自定义控件.cs代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// “用户控件”项模板在 http://go.microsoft.com/fwlink/?LinkId=234236 上提供

namespace App1
{
    public sealed partial class StackPanelByMyself : UserControl
    {
        //定义StackPanel控件中的元素的text属性
        private string text = "";
        public string Text
        {
            get
            {
                return text;
            }
            set
            {
                text = value;
                //解析文本信息进行排列显示
                ParseText(text);
            }
        }

        public StackPanelByMyself()
        {
            this.InitializeComponent();
        }

        //解析孔家的Text属性的赋值
        private void ParseText(string value)
        {
            string[] textBlockTexts = value.Split(' ');
            //清除之前的stackPanel容器的子元素
            this.stackPanel.Children.Clear();
            //重新添加stackPanel的子元素
            for(int i=0;i<textBlockTexts.Length;i++)
            {
                TextBlock textBlock = this.GetTextBlock();
                textBlock.Text = textBlockTexts[i].ToString();
                this.stackPanel.Children.Add(textBlock);
            }
        }

        private TextBlock GetTextBlock()
        {
            TextBlock textBlock = new TextBlock();
            textBlock.TextWrapping = TextWrapping.Wrap;
            textBlock.FontSize = this.FontSize;
            textBlock.Margin = new Thickness(0,10,0,0);
            return textBlock;
        }
    }
}

引用自定义控件:

XAML代码:

<Page
    x:Class="App1.UserControlDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    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:StackPanelByMyself x:Name="stackPanelByMyself" FontSize="30">
        </local:StackPanelByMyself>
    </Grid>
</Page>

.CS代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// “空白页”项模板在 http://go.microsoft.com/fwlink/?LinkID=390556 上有介绍

namespace App1
{
    /// <summary>
    /// 可用于自身或导航至 Frame 内部的空白页。
    /// </summary>
    public sealed partial class UserControlDemo : Page
    {
        public UserControlDemo()
        {
            this.InitializeComponent();

            string text = "超级英雄: 超人 蜘蛛侠 神奇四侠 绿巨人 美国队长 绿灯侠 钢铁侠 蝙蝠侠";
            stackPanelByMyself.Text = text;
        }

        /// <summary>
        /// 在此页将要在 Frame 中显示时进行调用。
        /// </summary>
        /// <param name="e">描述如何访问此页的事件数据。
        /// 此参数通常用于配置页。</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }
    }
}

时间: 2024-12-25 16:09:42

Windows Phone 8.1中自定义用户控件及如何调用用户控件的相关文章

winform 利用 多线程 处理窗体假死,利用 Invoke BeginInvoke 处理子线程调用 UI 控件报错的问题

因为工作需要自己写了一个简单的工具软件,数据库查询每日OA未发送成功流程的日志记录以及批量重处理操作. 开始使用的是单线程,后台查询数据库的时候窗体假死,使用多线程很简单就能解决. private void btnQuey_Click(object sender, EventArgs e) { this.button2.Enabled = false; Thread connectionThread = new Thread(new ThreadStart(connectDB)); connec

Windows Phone 8.1中数据显示控件基石------ItemsControl

在Windows Phone 8.1中数据显示交互控件无外乎FlipView,ListView,GridView等,但我们用的时候总不能直接写 <FlipView/>,<ListView/>,<GridView/>之类来使用吧,虽说这样也可以,但这样呈现出来的画面就很难看了,哪 个用户会高兴看呢,反正我是不高兴看. 在这里问题就来了,不光要求数据能绑定到位,功能也到位,界面也总得美化美化吧. 好了进入正题了: 这些数据呈现控件的基石是谁呢?当然是ItemsControl

[Aaronyang] 写给自己的WPF4.5 笔记13[二维自定义控件技巧-可视化状态实战,自定义容器,注册类命令,用户控件补充]

 我的文章一定要做到对读者负责,否则就是失败的文章  ---------   www.ayjs.net    aaronyang技术分享 博文摘要:欢迎大家来支持我的<2013-2015 Aaronyang的又一总结,牧童遥指纳尼村>绝对好文章 关于<写给自己的WPF4.5 笔记14,已在官网发布> 1.讲解了自定义控件加入命令支持的两种手段,补充用户控件的客户定义模板 2.实战的方式讲解了无外观控件,可以让使用者定义模板,讲解模板PART,使用可视化状态组,动画的使用 效果演示:

在Windows Server 2008 R2中使用web方式修改域用户账户密码

在Windows的domain环境下,加域的客户端修改账户密码是一件很easy的事情:即使没有加域的客户端如果组织中,使用Exchange邮件系统,借助Exchange的owa也可以轻松修改账户密码. 前段时间搞Web+Portal 认证时,由于存在少量的LDAP用户,该Web+Portal认证不支持AD+LDAP双认证.为了让这部分用户也能够实现认证,采用了域名+用户名(避免和域用户重名)的方式导进了AD中,并设置了初始密码.可是问题也出现了,这部分用户不加域也没有Exchange邮箱,如何才

Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)

原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) --------------------------------------------------------------------------------引用或转载时请保留以下信息:大可山?[MSN:a3news(AT)hotmail.com] http://www.zpxp.com?http://www.brawdraw.com萝卜鼠在线图形图像处理

web页面动态加载UserControl,并调用用户控件中的方法来初始化控件

1,HTML页 头部注册: <%@ Register Src="~/WorkLog/WorkLogNewV1/UserControl/CeShiBu.ascx" TagPrefix="UserControl" TagName="CeShiBu"%> <%@ Register Src="~/WorkLog/WorkLogNewV1/UserControl/KaiFaBu.ascx" TagPrefix=&quo

ListView使用自定义适配器的情况下实现适配器的控件点击事件执行Activity界面中的方法

如果ListView使用的是自定义的适配器,比如MyArrayAdapter extends ArrayAdapter<String> 那么,如何实现适配器中的点击事件执行activity界面中的方法呢? 实现思路:在自定义适配器MyArrayAdapter 类型中自定义接口和接口方法,然后在activity界面中MyArrayAdapter实例实现这个接口. 较为完整的代码见上文. 1.MyArrayAdapter 关键代码 自定义接口和方法的代码如下: //列表项的单击事件监听接口 pub

针对Windows 64位系统中Matlab没有LED Control Activex控件的解决方法

Win 10 64bits系统中Matlab 64位软件没有LED Control Activex控件,LED ActiveX Control控件位于Gauges Blockset模块中,而Gauges Blockset模块只能安装在Matlab 32-bit的版本中(并不是一定需要安装在window 32-bit,本人测试环境为win10 64bit),在win10 64-bit环境下安装时默认安装的是Matlab 64-bit,所以不会安装Gauges Blockset模块,当然就不会有Ac

PB中自定义事件ID含义

PB中自定义事件ID含义 单选或多选按钮消息(前缀:pbm_bm) pbm_bmgetcheck 单选按钮或多选按钮是否被选. pbm_bmgetstate 按钮是否加亮. pbm_bmsetcheck 将无线按钮或确认框的选中状态改为未选中状态,反之亦然. pbm_bmsetstate 加亮或不加亮按钮. pbm_bmchange 改变按钮的风格,例如,改为单选按钮或组合框. 单选或多选按钮通知消息(前缀:pbm_bn) pbm_bnclicked 按钮控件被点中. pbm_bndisable