WPF控件开发的入门引导

如果动态创建WPF控件,动态捕捉控件的事件,以及定义属性等,上图是我学习后的一个效果图,后续会把实现的代码直接贴上来,我相信看代码是众网友的强项。

以下是我的工程文件预览:

App.xaml没动过,是系统生成的。

MainWindow.xaml

[xaml代码]

<Window x:Class="WpfMainApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid Name="grdParent">
        <Button Content="Dynamic Load Wpf Control" Height="36" HorizontalAlignment="Left" Margin="12,263,0,0" Name="button1" VerticalAlignment="Top" Width="228" Click="button1_Click" />
        <Button Content="Set Wpf Control Content" Height="29" HorizontalAlignment="Left" Margin="254,12,0,0" Name="button2" VerticalAlignment="Top" Width="213" Click="button2_Click" />
        <TextBox Height="29" HorizontalAlignment="Left" Margin="12,12,0,0" Name="textBox1" VerticalAlignment="Top" Width="147" />
    </Grid>
</Window>
[CS代码]

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using WpfComctl; namespace WpfMainApp { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void border1_TouchUp(object sender, TouchEventArgs e) { } private void button1_Click(object sender, RoutedEventArgs e) { EditPlus item = new EditPlus(); item.ButtonClick += new EventHandler(item_ButtonClick); item.NodeClick += new EventHandler(item_NodeClick); Thickness loc = new Thickness(); loc.Left = 12; loc.Top = 0; item.Margin = loc; item.Width = 100; item.Height = 200; grdParent.Children.Add(item); } void item_NodeClick(object sender, EventArgs e) { MessageBox.Show("NodeClicked!"); } void item_ButtonClick(object sender, EventArgs e) { MessageBox.Show("ButtonClicked!"); } private void button2_Click(object sender, RoutedEventArgs e) { foreach (UIElement item in grdParent.Children) { if (item.GetType().IsAssignableFrom(typeof(EditPlus))) { (item as EditPlus).ButtonText = textBox1.Text; } } } } }

下面是控件的代码:

EditPlus.xaml

[xaml代码]

<UserControl x:Class="WpfComctl.EditPlus"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d"
             d:DesignHeight="300" d:DesignWidth="300" Name="EditPlusControl">
    <Grid Name="grdRoot"></Grid>
</UserControl>

[CS代码]

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfComctl { /// <summary> /// Interaction logic for UserControl1.xaml /// </summary> public partial class EditPlus : UserControl { public event EventHandler ButtonClick; public event EventHandler NodeClick; public EditPlus() { InitializeComponent(); Button btnItem = new Button(); btnItem.Content = "ClickMe"; btnItem.Click += new RoutedEventHandler(btnItem_Click); btnItem.Width = 100; btnItem.Height = 20; Thickness loc = new Thickness(); loc.Left = 0; loc.Top = 0; btnItem.Margin = loc; grdRoot.Children.Add(btnItem); TreeView treeView1 = new TreeView(); treeView1.MouseDown += new MouseButtonEventHandler(treeView1_MouseDown); treeView1.Height = 100; treeView1.Width = 60; Thickness loc1 = new Thickness(); loc1.Left = 0; loc1.Top = 150; treeView1.Margin = loc1; TreeViewItem item = new TreeViewItem(); item.MouseLeftButtonUp += new MouseButtonEventHandler(item_MouseLeftButtonUp); item.Header = "Root"; SolidColorBrush border = new SolidColorBrush(); border.Color = SystemColors.HotTrackColor; treeView1.BorderBrush = border; treeView1.Items.Add(item); grdRoot.Children.Add(treeView1); } void item_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (NodeClick != null) NodeClick(sender, new EventArgs()); } public string ButtonText { get { foreach (UIElement item in grdRoot.Children) { if (item.GetType().IsAssignableFrom(typeof(Button))) { return (item as Button).Content.ToString(); } } return string.Empty; } set { foreach (UIElement item in grdRoot.Children) { if (item.GetType().IsAssignableFrom(typeof(Button))) { (item as Button).Content=value; } } } } void treeView1_MouseDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Left && e.ButtonState == MouseButtonState.Released) { if (NodeClick != null) NodeClick(sender, new EventArgs()); } } void btnItem_Click(object sender, RoutedEventArgs e) { if (ButtonClick != null) ButtonClick(sender, new EventArgs()); } } }

转载于:https://www.cnblogs.com/yulinlover/archive/2010/04/05/1911851.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值