⑴ 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;