①结构和类非常的相似,例子<<C#入门经典>>
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch09Ex03
{
class MyClass
{
public int val;
}
struct myStruct
{
public int val;
}
class Program
{
static void Main(string[] args)
{
MyClass objectA = new MyClass();
MyClass objectB = objectA;
objectA.val = 10;
objectB.val = 20;
myStruct structA = new myStruct();
myStruct structB = structA;
structA.val = 30;
structB.val = 40;
Console.WriteLine("objectA.val={0}",objectA.val);
Console.WriteLine("objectB.val={0}",objectB.val);
Console.WriteLine("structA.val={0}",structA.val);
Console.WriteLine("structB.val={0}",structB.val);
Console.ReadKey();
}
}
}

示例的说明
这个应用程序包含俩个类型定义.一个是结构myStruct的定义.他有一个公共的int字段val,另一个是类的MyClass的定义,他包含一个相同的字段.接着对这两种类的实例执行相同的操作;
结果不同.同样都是给val字段赋一个值.
结果:
对象是引用类型.在把对象赋给变量时,实际上是把带有一个指针的变量赋给了该指针所指向的对象.在实际代码中,指针式内存中的一个地址.在这种情况下,地址是内存中该对象所在的位置.在用下面的代码把第一个对象引用赋给类型为MyClass的第二个变量时,实际上是复制了这个地址.
MyClass objectB=objectA;
这样两个变量就包含同一个对象的指针.
结构是值类型.其变量并不是半酣结构的指针.而是包含结构本身.在用下面的代码把第一个结构赋给类型为myStruct的第二个变量时,实际上是把第一个结构的所在信息复制到另一个结构中.
myStruct structB=structA;
圣殿骑士更新了博客.第七章主要是讲的"依赖属性".
所以自己看书也了解下这个属性!依赖属性对于WPF还是非常重要的,学习这段知识的时候,还是应该慢点,细点!
public class Button : ButtonBase
{
public static readonly DependencyProperty IsDefaultProperty;
static Button()
{
Button.IsDefaultProperty = DependencyProperty.Register("IsDefault", typeof(bool), typeof(Button), new FrameworkPropertyMetadata(false
, new PropertyChangedCallback(OnIsDefaultChanged)));
}
}
//.NET属性包装器(可选)
public bool IsDefault
{
get { return (bool)GetValue(Button.IsDefaultProperty); }
set { SetValue(Button.IsFocusedProperty, value); }
}
//属性改变的回调(可选)
private static void OnIsDefaultChanged(DependencyObject o,DependencyPropertyChangedEventArgs e)
{
}
IsDefaultProperty 静态成员是真正的依赖属性,类型System.Windows.DependencyProperty.按规则,所有的DependencyProperty成员必须都是Public、static,并且有一个property作为后缀,依赖属性通常是用过调用DependencyProperty.Register静态方法创建的.这样的方法需要一个名称(IsDefault)、一个属性类型(bool)以及一个拥有这个属性的类(Button 类).通过不同的Register方法重载.你可以传入metadata(元数据)来告诉WPF如何处理该属性、如何处理属性改变的回调、如何处理强制值转换,以及如何验证值. Button毁在他的静态构造函数中调用Register的重载,给依赖属性一个默认值false,并为变更通知添加一个委托.
2.自己写了随便写了一个
<Window x:Class="WpfApplication2.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"
FontSize="30" Foreground="Orange" FontStyle="Italic">
<StackPanel>
<Label Background="White" FontSize="20">
12345566777
</Label>
<Label>22222222</Label>
<Label>33333333</Label>
<ListBox >
<ListBoxItem>110</ListBoxItem>
<ListBoxItem>120</ListBoxItem>
</ListBox>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Height="Auto" Width="Auto">
<Button Width="75" Margin="10">OK</Button>
<Button Width="75" Margin="10">Cancel</Button>
</StackPanel>
<StatusBar Height="43">1233131311313</StatusBar>
</StackPanel>
</Window>
对于大部分元素来说,设置回沿着逻辑数向下传递,并由子元素继承.这甚至会影响Button和LIstboxItem元素,尽管他们位于逻辑树的第三层,第一个Label的FontSize并没有改变,因为它被显示的值为20,重载了继承的值30.而继承后的FontStyle的Italic设置将会影响所有的Label、ListboxItem和Button元素,这是因为他们没有被显式设置过.
注意:虽然StatusBar也像其他空间一样支持着两个属性,但它的文本并没有收到任何值影响.属性值的继承行为时由以下的两种因素决定的:
①并不是每个依赖属性都参与属性值继承的.
②有其他一些优先级更高的源来设置这些属性值
有一些控件如StatusBar、Menu和ToopTip控件,其内部会把字体属性设置为当前的系统设置.通过这种方式.用户可以在控制面板中控制他们的字体....这样的控件会吞噬所有的继承.
3.附加属性
TextElement.FontSize和TextElement.FontStyle(而不是简单的FontSize和FontStyle属性),必须在StackPanel元素中使用.因为StackPanel没有这两个属性.当XAML解析器或者编译器遇到这种语法的时,他就要求TextElement(有时叫做附加属性提供者)有两个状态分别叫做SetFontSize和SetFontyle,这样他们才可以设置相应的属性值.
[转.圣殿骑士]4.依赖属性监听
如果想监听依赖属性的改变,可以用两种方法实现,
①用DependercyProertyDescriptor比较简单,在代码里面写起来也比较便捷;
②用OverrideMatadata的方式主要在自定义控件以及处理一些类间关系的时候;
第一种方法:派生自这个类.然后定义它的属性.重写属性的原数据并传递一个PropertyChangedCallBack参数即可;省略
第二种方法:第二种方法:这个方法更加简单,获取DependencyPropertyDescriptor并调用AddValueChange()为其挂接一个回调函数
代码
private void Window1_Loaded(object sender, RoutedEventArgs e)
{
//第二种方法,通过OverrideMetadata
DependencyPropertyDescriptor descriptor = DependencyPropertyDescriptor.FromProperty(TextBox.TextProperty, typeof(TextBox));
descriptor.AddValueChanged(tbxEditMe, tbxEditMe_TextChanged);
}
private void tbxEditMe_TextChanged(object sender, EventArgs e)
{
MessageBox.Show("", "Changed");
}
怕自己一个忘记,所有转写到博客里面:
- System.Object 类:大家都知道在.Net中所有类型的根类型,在图中没有画出来,DispatcherObject 就继承于它,所以它是整个应用系统的基类。
- System.Windows.Threading.DispatcherObject 类:WPF 中的绝大多数对象是从 DispatcherObject 派生的,它提供了用于处理并发和线程的基本构造。WPF 是基于调度程序实现的消息系统。
- System.Windows.DependencyObject类:WPF基本所有的控件都实现了依赖属性,它表示一个参与依赖项属性系统的对象。
- System.Windows.Media.Visual类:为 WPF 中的呈现提供支持,其中包括命中测试、坐标转换和边界框计算等。
- System.Windows.UIElement 类:UIElement 是 WPF 核心级实现的基类,该类建立在 Windows Presentation Foundation (WPF) 元素和基本表示特征基础上。
- System.Windows.FrameworkElement类:为 Windows Presentation Foundation (WPF) 元素提供 WPF 框架级属性集、事件集和方法集。此类表示附带的 WPF 框架级实现,它是基于由UIElement定义的 WPF 核心级 API 构建的。
- System.Windows.Controls.Control 类:表示 用户界面 (UI) 元素的基类,这些元素使用 ControlTemplate 来定义其外观。
- System.Windows.Controls.ContentControl类:表示包含单项内容的控件。
- System.Windows.Controls.ItemsControl 类:表示一个可用于呈现项的集合的控件。
- System.Windows.Controls.Control 类:表示 用户界面 (UI) 元素的基类,这些元素使用 ControlTemplate 来定义其外观。
-
- System.Windows.Controls.Panel类:为所有 Panel 元素(布局)提供基类。使用 Panel 元素在 Windows Presentation Foundation (WPF) 应用程序中放置和排列子对象。
- System.Windows.Sharps.Sharp类:为 Ellipse、Polygon 和 Rectangle 之类的形状元素提供基类。
除了上面的图以外,还有几个命名空间也很重要,如下:
-
- System.Windows.Controls.Decorator 类:提供在单个子元素(如 Border 或 Viewbox)上或周围应用效果的元素的基类。
- System.Windows.Controls.Image 类:表示显示图像的控件。
- System.Windows.Controls.MediaElement类:表示包含音频和 /或视频的控件。
今天稍微了解下了WPF的架构和一些基础的知识。。。。
从头学起的新技术。。所以没什么可以写的,。。过几天写心得!
多关注下http://www.cnblogs.com/prism/ 和http://www.cnblogs.com/zenghongliang/的博客!!
手术差不多一年了,这一年来经历了很多,悲伤总是围绕在身边.......本来想写很多的,不知道为什么又用省略号代替了,太多的事情刻骨铭心!希望看到这篇文章的人,能好好的珍惜生活!
开通博客,不是为了怎么样,是希望从现在开始记录生活的点点滴滴,技术也好,生活也好!我们不能逃离的!
