⑴ C#/WPF高手进!关于依赖属性、附加属性等声明方式以及静态构造函数、静态属性等问题。
.......................
你这个问题挺好的!好多人都不去关心这个。好些人号称做过好久WPF的,问他依赖属性,路由事件,都说不明白。
WPF里的依赖属性 都是 继承 自DependencyObject。
对于 依赖属性 和 附加依赖属性的 那个静态量,你可以当做一个Key。
在DependencyObject 的内部有一个 类似与字典的东西,通过当前这个Key去取里面的取,得到你最终的属性值。你可以去微软官网上查看源码。
定义依赖属性的时候,一般我们都会定义一个 属性的读写器,让这个属性用起来,像一个CLR属性而已,你看这个属性的时候,他的get,set方法,调用的是 this.GetValue 和 SetValue 两个方法。
定义附加依赖属性的时候,也是有一个读写器的,但这个和咱们定义扩展方法(如lamda 的方法一样)一样,因为是在类外扩展的,都是以静态的方式表现的。
好处的话:
可能是为了现绑定之类的功能吧,这块的源码真没注意过。
为了共享属性的默认值。在定义依赖属性的时候会给一个默认值,平时大家用控件的时候,不会设置所有的值,用依赖项属性,如果不去设置,页面上所有的控件,都会共用这个值。
现在想到的就这么多啦。
⑵ 谁能给我WPF 仿 苹果相册的源码吗这关系到我的工作急需啊
可以采用Surface来开发,具体没做过!
⑶ wpf 如何实现角度渐变,就是0-30度角的圆是红色,30-60度角的圆由红渐变为黄, 就是寻找非线性渐变的方法.
<RectangleWidth="200"Height="100">
<Rectangle.Fill>
<LinearGradientBrushStartPoint="0,0"EndPoint="1,1">
<GradientStopColor="Yellow"Offset="0.0"/>
<GradientStopColor="Red"Offset="0.25"/>
<GradientStopColor="Blue"Offset="0.75"/>
<GradientStopColor="LimeGreen"Offset="1.0"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
上次那样的是3D图形,不是2D,三角形椎体是一个颜色红色,至于看起来颜色有深浅是因为光线反射,此例的目的就是设置照相机,源代码查看MSDN的VS2010WPF示例的最后一个例子,也可以查看C#编程指南但尧编着清华大学出版社2011年1月。
⑷ .netcorewpf可以反编译
netcorewpf可以反编译。wpf、winform等框架生成的执行文件是可以被ILSPY等软件反编译的,只要将exe文件拖到ILSPY,源码就会被可以反编译。
⑸ 求WPF入门实例教程包含源码。
http://www.pudn.com/downloads291/sourcecode/windows/detail1309737.html
wpf入门教程,给初学wpf的同学一些帮助,挺不错的,在此分享一下。
O(∩_∩)O~
⑹ 学什么框架最好,wpf,qt还是wtl等等,最流行那个那个用人最多
走Linux用qt.
走Windows 用 WTL
WTL完全开源,也可以修改源码,从长远角度来说肯定是WTL好。
还有MFC也有必要学习下,不是要用他做东西,是理解他的框架。
c#的wpf就算了。。。。。
怎么说呢。。开发效率挺高,运行效率很低,封装得还不错,
不过自由性不高,从长远发展来看不建议。
⑺ 关于vs中wpf的xaml下命名空间的问题
那你有没有在xaml里添加其命名空间?类似如下:
xmlns:vm="clr-namespace:DemoApp.ViewModel"
⑻ wpf 如何调用ObservableCollection<Model>中 model类里面的方法。
这里建议你使用Binding来处理。
了解下ObservableCollection<T> 类和BindingList<T> 类。
ObservableCollection<T> 类
表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。
具体说明参考MSDN文档:http://msdn.microsoft.com/zh-cn/library/vstudio/ms668604(v=vs.100).aspx
BindingList<T> 类
提供支持数据绑定的泛型集合。BindingList<T> 类可以用作基类以创建双向数据绑定机制。
具体说明参考MSDN文档:http://msdn.microsoft.com/zh-cn/library/vstudio/ms132679(v=vs.100).aspx
两个都是支持双向绑定的,ObservableCollection<T>实现了 INotifyCollectionChanged 接口的数据集合的内置实现,还提供了CollectionChanged事件,在数据集的变更上提供的解决方法多一点。
看一下BindingList<T>,注意protected override void OnListChanged(ListChangedEventArgs e)的这个方法,可以重写这个方法实现强大的功能。
下面写一个自己的MyBindingList<T> 类来实现你所需要的功能。
8
23
24
25
26
public class MyBindingList<T> : BindingList<T>
{
public List<T> ModeList { get; set; }
public MyBindingList()
: base()
{
ModeList = new List<T>();
}
public MyBindingList(IList<T> list)
: base(list)
{
ModeList = new List<T>();
}
protected override void OnListChanged(ListChangedEventArgs e)
{
base.OnListChanged(e);
if (e.ListChangedType == ListChangedType.ItemChanged)
{
ModeList.Add(this.Items[e.NewIndex]);
}
}
}
完整的源代码看下附件。
要触发OnListChanged(),类需要继承INotifyPropertyChanged并触发值更改消息。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class Student : INotifyPropertyChanged
{
private string _Id;
public string Id
{
get { return _Id; }
set
{
_Id = value;
NotifyPropertyChanged("Id");
}
}
private string _Name;
public string Name
{
get { return _Name; }
set
{
_Name = value;
NotifyPropertyChanged("Name");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
在MyBindingList里面添加ModeList属性,记录修改的记录,访问该属性就能获得修改的项。
看下是不是你需要的结果,如有疑问,可以继续回复。
⑼ WPF的WebBrowser如何获取跳转后的页面源码
部分代码如下:
在窗口及WebBrowser创建完以后,写此代码:
WebBrowser.OnNewWindow2:=IE1NewWindow2;
给主窗口创建一个方法:
procere TBrowForm.IE1NewWindow2(Sender: TObject; var ppDisp: IDispatch;var Cancel: WordBool);
Var NewForm:TBrowForm;
begin
try
NewForm :=TPopBrowerForm.Create(application);
NewForm.WebBrowser.OnNewWindow2 :=IE1NewWindow2;//如果在窗口的Oncreate事件
//有此代码,此处就可以省略
ppDisp := NewForm.WebBrowser.Application;
NewForm.Show;
Cancel:=false;
except
end;
end;