①结构和类非常的相似,例子<<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;

 

posted @ 2010-09-01 14:43 ~@@~ 阅读(23) 评论(0) 编辑

  圣殿骑士更新了博客.第七章主要是讲的"依赖属性".

所以自己看书也了解下这个属性!依赖属性对于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");
}

 

posted @ 2010-08-30 11:00 ~@@~ 阅读(54) 评论(0) 编辑

  怕自己一个忘记,所有转写到博客里面:

 

  • 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.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类:表示包含音频和 /或视频的控件。
posted @ 2010-08-19 10:07 ~@@~ 阅读(18) 评论(0) 编辑
WPF

  今天稍微了解下了WPF的架构和一些基础的知识。。。。

  从头学起的新技术。。所以没什么可以写的,。。过几天写心得!

  多关注下http://www.cnblogs.com/prism/ 和http://www.cnblogs.com/zenghongliang/的博客!!

posted @ 2010-07-20 23:12 ~@@~ 阅读(12) 评论(0) 编辑

   手术差不多一年了,这一年来经历了很多,悲伤总是围绕在身边.......本来想写很多的,不知道为什么又用省略号代替了,太多的事情刻骨铭心!希望看到这篇文章的人,能好好的珍惜生活!

   开通博客,不是为了怎么样,是希望从现在开始记录生活的点点滴滴,技术也好,生活也好!我们不能逃离的!

   

posted @ 2010-07-13 09:42 ~@@~ 阅读(173) 评论(0) 编辑