[Aaronyang]談談2015年AY對WPF全面技術總結40多篇WPF,炫到沒朋友的AYUI來了



image         原著:AY WPF博客- 把wpf推廣出去,讓那些鄙視的人說不

         大家好!

         我是AY,首先聲明,我在做一件很枯燥的事情,我是個91后程序員,每天熬夜完成計划的過着下班后的生活.

         那天有人反對,那天有人安慰,那天有人嘲諷,那天有人祝福。

         過了6個月后,我對自己的夢想一直沒有改變過,繼續堅持,終於,AYUI誕生了。

         今天有人說造輪子,今天有人說你好厲害,今天有人說開源嗎? 有人說好喜歡...

         有貶有褒,但是好的聲音多了。

         但是身體的各種問題也來了..

 

 

AYUI自定義安裝包:演示視頻:http://pan.baidu.com/s/1eQ2fw7S

AY提供的WPF書籍下載:

AY

下載地址:http://pan.baidu.com/s/1oFU3c

 

下面列一下我寫的一些WPF值的學習的一些文章

 [Aaronyang] 寫給自己的WPF4.5 筆記[1布局]

[Aaronyang] 寫給自己的WPF4.5 筆記[2依賴屬性]

[Aaronyang] 寫給自己的WPF4.5 失傳的秘籍[多擴展顯示器編程]

 [Aaronyang]寫給自己的WPF4.5 筆記[3MenuItem中的icon]

[Aaronyang]寫給自己的WPF4.5 [wpf使用FontAwesome]

 [Aaronyang]寫給自己的WPF4.5 筆記5[數據綁定三巴掌1/3]

 [Aaronyang] 寫給自己的WPF4.5 筆記6[三巴掌-大數據加載與WPF4.5 驗證體系詳解 2/3]

 [Aaronyang] 寫給自己的WPF4.5 筆記7[三巴掌-ItemsControl數據綁定詳解與binding二次處理 3/3]

 [Aaronyang] 寫給自己的WPF4.5 筆記8[復雜數據處理三步曲,數據視圖精講1/3]

 [Aaronyang] 寫給自己的WPF4.5 筆記9[復雜數據處理三步曲,數據展示ListView淚奔2/3]

 [Aaronyang] 寫給自己的WPF4.5 筆記10[層次數據需求處理,TreeView綠色文章1/4]

 [Aaronyang] 寫給自己的WPF4.5 筆記11[自定義控件-AyImageButton篇 1/4]

[Aaronyang] 寫給自己的WPF4.5 筆記12[自定義控件-AyImageButton的過程 2/4]

[Aaronyang] 寫給自己的WPF4.5 筆記13[自定義控件技巧-可視化狀態實戰,自定義容器,注冊類命令,用戶控件補充]

 寫給自己的WPF4.5 筆記14[簡潔記憶命令Command]

 [Aaronyang] 寫給自己的WPF4.5 筆記15[AyArcChart誕生-WPF版本絢麗的環狀圖,Ay制作,AyWindow強勢預覽]

 [Aaronyang] 寫給自己的WPF4.5 筆記16[多線程]

 [Aaronyang] 寫給自己的WPF4.5 筆記17[Page實現頁面導航]

 [Aaronyang] 寫給自己的WPF4.5 筆記18[幾何圖形*Geometry圖文並茂講解]

 [Aaronyang] 寫給自己的WPF4.5 筆記19[Visual,命中測試,ay按鈕]

 [Aaronyang] 寫給自己的WPF4.5 筆記20 [3d課 1/4]

 [Aaronyang] 寫給自己的WPF4.5 筆記21 [3d課 2/4]

 [Aaronyang] 寫給自己的WPF4.5 筆記22 [3d課 3/4]

 [Aaronyang] 寫給自己的WPF4.5 筆記23 [3d課 4/4]

[Aaronyang] 寫給自己的WPF4.5 筆記24 [與winform交互-flash-DEMO-收尾篇1/6]

寫給自己的WPF4.5 25[DataGrid 1/3 ]

寫給自己的WPF4.5 26[DataGrid 2/3 ]

寫給自己的WPF4.5 27[文檔 1/2]

寫給自己的WPF4.5 28[OpenFileDialog,SaveFileDialog,PrintDialog,ColorDialog,FontDialog,FolderBrowserDialog]

[AY博客] 寫給自己的WPF4.5 [29] NotifyIcon

 

C#人愛學不學9[C#5.0異步實例+WPF自己的MVVM Async應用]

AyTabControlBase樣式分享

贈送大家一個Ay滾動條,高仿谷歌瀏覽器滾動條樣式代碼

[精品]AY撥雲見日-WPF3D開發補充筆記1

[精品]AY撥雲見日-WPF3D-三維中的2d 案例2

WPF4.5 拖拽文件解密- 窗體外文件到窗體內,窗體控件之間傳遞,以及動畫

WPF[4.5] AY 視頻循環播放MediaPlayer

WPF技巧+問題+經驗+摘記

wpf4.5 關於 BitmapImage設置圖片后 資源占用的問題

Blend教程(2015-8-7 20:49:52補充)

[Aaronyang紫色博客] 寫給自己的WPF4.5-Blend5公開課系列 1 
[Aaronyang紫色博客] 寫給自己的WPF4.5-Blend5公開課系列 2-更進一步 
[Aaronyang紫色博客] 寫給自己的WPF4.5-Blend5公開課系列3-再來一發 

下面是我的錄制的wpf視頻教程

1. AYUI 第一課WPF和Blend使用

AYUI

效果部分演示:演示exe下載

為了演示文件小,移除了很多圖片包,自己可以去下載,覆蓋下:http://pan.baidu.com/s/1pJxcSUf

如果你的電腦接了多個顯示器,多顯示器演示,可以右鍵菜單樹

 

監控演示

不變形的無圖片的進度條

獨一無二的顏色分析,配色系統

還在編寫的AYUI.Wizard程序打包軟件

 

慢鏡頭

 

當然wizard還沒寫完,還在寫,謝謝某某人的關心

 

 

 

 

 

自己寫了AYUI3.3版本的文檔說明:

AyWindow(擁有 高級換背景,炫彩支持,經過多次改善的 適合多需求多變化的窗體的模板控件)

AyPopupWindow (入場出場動畫方案,居中彈出,綁定位置顯示,右下角顯示)

AyMessageBox(替代自帶的MessageBox,用法幾乎和MessageBox一致,還可以自定義圖標)

Button(經過樣式美化后,適應主題的Button,支持平面化,通過附加屬性AyButton.IsFlatStyle=true設置)

ToggleButton(經過樣式美化后,適應主題的ToggleButton,支持平面化,通過附加屬性AyButton.IsFlatStyle=true設置)

checkbox(經過樣式美化后,適應主題的CheckBox)

RadioButton(經過樣式美化后,適應主題的RadioButton)

ContextMenu(經過深度樣式美化后,適應主題的ContextMenu)

ProgressBar(經過深度樣式美化后,適應主題的ProgressBar)

ScrollViewer(經過深度樣式美化后,適應主題的滾動條,默認隱藏,鼠標移到范圍內自動顯示,疊加在內容之上,不會改變內容布局)

AyColorPicker(顏色選擇器控件,繼承 Control)

ColorPickerDialog (顏色彈窗方式選擇控件,繼承UserControl)

AyComboBox(經過樣式美化后,適應主題的,繼承ComboBox,擁有更加靈活的彈出下拉框的樣式美化)

(待提高,下個版本將支持異步匹配)AyAutoCompleteTextBox(繼承Canvas,下拉匹配結果的Combobox控件,)

待改善 (暫時不要使用)AyFontButton(繼承Button,一個圖標(目前僅支持fontawesome的unicode值)加文字,可在皮膚設置窗口,圖片背景選項卡,選擇圖片 那個按鈕就是)

待改善 (暫時不建議使用)AyFontRadioButton(繼承RadioButton,一個圖標(目前僅支持fontawesome的unicode值)加文字. 支持 圖標加文字9種組合方式顯示,快速顯示內容,通過修改AyRadioButtonRenderMode枚舉類型的RenderMode對象的值,缺陷就是尺寸固定,支持圖標目前僅僅fontawesome,待提高)

使用 DEMO:

<StackPanel Margin="3,0,0,0" Orientation="Vertical"  x:Name="menuButtonLists">
            <control:AyFontRadioButton Tag="Page1.xaml"    RenderMode="Icon" IsChecked="True" Content="報警" FontAwesome="&#xF0EB;"  BorderThickness="0" FontDock="Top" Click="AyFontRadioButton_Click"/>
            <control:AyFontRadioButton Tag="Page2.xaml"  RenderMode="Icon" Content="縱覽" FontAwesome="&#xF185;"   BorderThickness="0"              FontDock="Top" Click="AyFontRadioButton_Click"/>
            <control:AyFontRadioButton Tag="Page3.xaml" RenderMode="Icon" Content="測試" FontAwesome="&#xF015;" BorderThickness="0"               FontDock="Top" Click="AyFontRadioButton_Click"/>
  </StackPanel>

所有的FontAweSome可以參考Ay封裝的 Enums下的AyFontAweSomeEnum 枚舉, \u是在后台到前台顯示值,如果是前台就用&#x代替 \u

AyIconAll  (萬能簡單高性能的圖標控件,繼承 UserControl,支持image控件的source屬性路徑,支持ico,支持ay框架的path用法,支持不是資源類型,放在文件夾里的gif路徑,支持fontawesome圖標庫的 fa-   fa_寫法的圖標控件)

AyPath (用於支持ay框架的 path顯示值)

使用步驟,把 path的data值放入Config文件夾下的application.xml中,例如如下,取個xml根節點的名字,把data值放入value中,然后使用附加屬性 control:PathKey.Key指定那個xml中的自己定義的根節點的名字

注意這里要使用前綴path_ 加上自定義的名字

AYUI

<control:AyPath  control:PathKey.Key="path_add" Width="12" Height="12" Padding="0"   Foreground="#CC5F5F5F" SnapsToDevicePixels="True"></control:AyPath>

AyGifControl (一個使用 ImageAnimator播放動畫的最高性能的Gif播放控件)

例如后台使用方法,前台模仿着使用

  AyGifControl imageGif = new AyGifControl
                       {
                           SnapsToDevicePixels = true,
                           Width = this.Width,
                           Height = this.Height,
                           VerticalAlignment = VerticalAlignment.Stretch,
                           HorizontalAlignment = HorizontalAlignment.Stretch,
                           Stretch = Stretch.UniformToFill
                       };
                        imageGif.InitControl(gif圖片路徑,不支持packuri);
                        imageGif.StartAnimate();

待重做 (暫時不要使用)AyHyperlink (超鏈接控件,繼承 Hyperlink)已經廢棄
帶調整,讓更簡單實用 AyImage4Button (用背景圖的按鈕,繼承Button,比如一張圖片有4種狀態組成的,靜態時候,鼠標移入顯示圖片,按下時候圖片,禁用時候圖片橫着擺放組成,自動25%的四等分寬度,高度是100%,同系列還有AyImage3Button,AyImage2Button)
待重做(不建議使用) AyPanel(繼承Panel,擁有頭部和 內容組成的一個面板,待提高,下一版本將增加拖動調整和顏色控制,將更加強大)

待重做 (暫時不要使用)AyPathIconButton(老版本的AyPath,比他多了個 IsStatic屬性,設置false的時候,會有鼠標移入和按下時候的透明度的變化)
(下個版本)AyPieMenuAyPieMenuItem(圓形的菜單按鈕)僅提供學習,下一個版本將提供DEMO使用
AyRadioList (繼承Panel,簡單易用的 包裝 RadioButton的容器,快速設置和獲得 容器中的 radiobutton的值)
(下個版本)AySimply3D,實現簡單的2D控件的三維效果
(系統內置拓展的控件,給海康監控使用)AySimplyControl
AySimplyListView (繼承ListView,實現性能極佳的 簡單的列表展示控件,頭部支持 是否顯示右側的分隔線,支持多種列,百分比列布局,最大最小寬度限制,不可以調節寬度的列,剩余部分填充寬度的列,涉及到的列,除基本的GridView外的列,新增FixedColumn,LayoutColumn,ProportionalColumn,RangeColumn,下個版本將增加更詳細的demo)
GridLineDecorator是網上找的一個listview自動畫線的,但是有個問題,就是窗體最大化時候,線沒有重繪,僅推薦使用 固定大小AySimplyListView上
AySlider(繼承Slider,一個可以自定義滑塊為AyIconAll的,有完成百分比標注,未完成百分比的,滑動時候,有跟隨值變化提示的縮略圖的滑塊控件,適合修改學習變成播放器的控件,已經適應主題變化)
AyOpacitySetSlider(修改Slider控件的樣式,使用方法,Slider控件,然后style指定這個名字,即可變身)
AySplitButton(繼承AyButton,讓其支持平面化,通過附加屬性AyButton.IsFlatStyle=true設置,分隔下拉控件,菜單位置可以像tooltip那樣設置,SplitButtonMode用於調整模式Split, ComboMenu, Button,可以變成ComboMenu)
ComboMenu(由AySplitButton的屬性設置演變,使按鈕變成下拉框,點擊按鈕,產生下拉菜單,菜單位置可以像tooltip那樣設置)
(下個版本增加demo)AyStrokeLabel(繼承 Label,用於給文字描邊),AyIconAll已經使用
使用Demo

  AyStrokeLabel tb = new AyStrokeLabel
                       {
                           VerticalAlignment = VerticalAlignment.Center,
                           Stroke = Stroke,
                           StrokeThickness = StrokeThickness,
                           FontSize = FontSize,
                           FontWeight = FontWeight,
                           FontStretch = FontStretch,
                           FontStyle = FontStyle
                       };

AySwitch(繼承ToggleButton的開關控件,左側和右側的內容可以自定義,背景顏色都可以自定義,寬度隨便寬,滑動效果自動計算)
AyTabControl (Tab控件重寫,支持上下左右四種位置的tabItem展現,TabItem支持圖標,是否關閉,tabPanel中前面可以設置下拉歷史和新增空Tab,tabitem的寬度自動適應調節,出現上一頁下一頁,支持滾輪和部分快捷鍵,適合做瀏覽器的tab)。
AyTextBox(繼承TextBox,重寫了TextPropertyChanged事件,Mask設置水印文本值,水印是漸變消失的,漸變出現。)
AyTreeView(繼承 TreeView,支持展開和折疊 動畫,支持2種菜單展示方式。注意: 圖標模式,建議二級菜單的數據。樹狀模式 支持多級,如果大數據,建議關掉 動畫效果。treeviewitem高度可以調節,整行選中,自動計算留出前邊距)
AyWrapPanel(繼承Panel,支持下個控件是否換行,因為WrapPanel是不允許換行的,自動計算到本行最后才會換行,在容器中的某個控件添加附加屬性 control:AyWrapPanel.LineBreakBefore="True"就可以強制換行)
待改進(下個版本)MaskedTextBox(掩碼文本框)
TemplateBorder(一個使用父類元素的Background,BorderBrush,BorderThickness,Padding的Border)

<Style TargetType="control:TemplateBorder">
        <Setter Property="Background" Value="{Binding Path=Background, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}" />
        <Setter Property="BorderBrush" Value="{Binding Path=BorderBrush, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}" />
        <Setter Property="BorderThickness" Value="{Binding Path=BorderThickness, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}" />
        <Setter Property="Padding" Value="{Binding Path=Padding, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}" />
    </Style>

(下個版本)LazyBinding(延遲綁定)
(下個版本)FloatWindowBehavior(窗體靠近邊緣自動停靠,離開后自動縮小到屏幕邊緣)
AyArcChart(繼承ListBox,一個扇形大小的統計圖控件,Ay自己寫的,學習價值很好)
(待改進)AyImageViewer(圖片預覽控件,放大縮小移動。雙擊重置狀態)
(下個版本)AyPagePanel(繼承AyWindow,用於多屏使用,直接把Page扔進去的window,比如右鍵投影到屏幕A,而頁面A是Page寫的,可以直接放大AyPagePanel,然后顯示AyPagePanel,下個版本,將增加多屏幕DEMO,自動記憶屏幕狀態,此DEMO已完成尚未遷移,已經測試通過,框架中含有多屏處理的快速類)
ShowCurrentTime(繼承UserControl,簡單易用的時間顯示控件,支持 復合枚舉YMD, HMS,HHMS,YMDHMS,YMDHM, YMDHHMS,YMDHHM,Week,時間和周的顯示)
Uc_HKControl(繼承UserControl,一個自定義形狀的面板控件,這個控件的代表性意義,我研究出了自定義類型,自定義形狀顯示的控件,比如我可以把RepeatButton改成三角形,而且三角形隨便放大,中間的內容按指定大小放大,並且新的命令方式拓展控件開發方式,新增AyCommandParameter類,用來傳遞特殊事件的參數)
TransitionPresenter (一個動畫過渡控件,如果DataTemplate值發生了變化,自動應用AyTrasition中的24種動畫過渡。使用方法可以在SkinSetWindow.xaml中看見使用,在窗體背景切換動畫也有)
(詳細會在本周發布的博客中使用說明)
其他大型DEMO: 海康監控 手動登陸版本,海康監控在Page中自動登陸顯示,自動切換監控視頻,自動退出上次賬號,進入新的賬號,由於page沒有窗口關閉時事件,所以不知道如何自動退出監控賬號,但這里ay已經解決,不會報錯,而不內存泄露。簡單上下左右雲台api使用說明控制,模仿着寫,其他的api也很簡單使用了。

主題系統說明

強烈推薦使用,導航菜單配合 page使用,因為page頁面可以再AyPagePanel中可以立刻變成Window而投影到其他屏幕,也容易web遷移,也容易本頁面切換頁面,而不影響到導航菜單的狀態。
AYUI框架除了 有精美的控件可以學習,可以使用,當然離不開經過3個版本的研究和改進,已經很成熟和穩定了。
優勢1:
經過多番改進的AyWindow,已經可以變化出多種頁面布局,解決自定義窗口的:陰影,透明度,最大化到任務欄,拖拽調整窗體大小的范圍,而AyWindow可以再窗體內容外有很大面積的響應去調整窗體狀態,右上角窗體必備按鈕可以自定義,窗體必備按鈕區域除了五個元素(皮膚設置,系統菜單,最大化,最小化,關閉)外,在其左側有個內容區域ToolBarContent,類似Button的Content屬性,自定義其他內容。WindowMenu屬性可以自定義系統菜單,樣式精美,五大元素自動適應背景色,調整其邊框色適應主題。
RectangleOpacity1到RectangleOpacity4的透明度屬性拓展,你也可以增加其他,然后在炫彩支持中 調整AyWindow中的各個屬性,並且同步到application.xml中,application.xml使用ConfigSetting設置值和獲得值。
當然AyPopupWindow也有RectangleOpacity1到RectangleOpacity4的透明度屬性拓展,調整屬性。

優勢2:
StaticResource屬性的換膚,讓性能更好,程序啟動速度更快,內存占用低,非DynamicResource,透明度調節是DynamicResource

AYUI

AySkin放置控件外觀,Colors放置 控件外觀的資源文件,例如顏色,數值等
如果外觀一樣,顏色不一樣,只需要1個外觀文件和多個顏色文件,而此框架,只需要一個基本顏色,其他顏色動態計算的。如果你有特殊的顏色控制,可以增加第二個顏色的文件,增加一個控件外觀控制資源。
然后在application.xml中themeColor和themeSkin指定下即可,Skin的命名方式 XXXAyControl ,Color的命名方式XXXAyThemeColor,系統每次打開自動合並資源,計算顏色,然后顯示,你可以控制不調整顏色,都可以。
所以有源碼版本修改方便。

AYUI

其中skinSwitchAnimation是指動畫切換方式的動畫,0-23,有24種動畫切換。
Gaosi用來記錄 窗體模糊程度。

常用類說明:

AyPropertyChanged是一個INotifyPropertyChanged接口的類,用於實體繼承,實現消息通知,繼承它,通知更方便,支持多種方式,Ay經驗積累的類
例如:

  private string uri;
 
        public string Uri
        {
            get { return uri; }
            set
            {
                uri = value;
                this.OnPropertyChanged(() => this.Uri);
            }
        }
    private double width;
 
        public double Width
        {
            get { return width; }
            set
            {
                width = value;
                OnPropertyChanged("Width");
            }
        }

也可以通知同時多個屬性

private double width;
 
        public double Width
        {
            get { return width; }
            set
            {
                width = value;
                OnPropertyChanged(new string[]{ "Width","Height"});
            }
        }

AyTreeViewItemModel是給AyTreeView量身定做的,下個版本將有更多的兄弟姐妹
CommonHelper很常用,用來轉換數據類型,例如 CommonHelper.GetInt(obj) ,obj不管什么類型,是tryparse的,轉換效果最好,如果失敗,返回0
ExtensionMethodHelper(拓展方法類)擁有多屏幕開發還有其他的方法,已經寫好了,demo還沒遷移過來。但是代碼一看就懂。指定屏幕顯示窗體 ToExtensionMaxScreen和ToExtensionNormalScreen拓展方法。

(下個版本提供demo,用於多文檔單進程自定義文件格式的wpf項目)FileRegistrationHelper類用於注冊文件類型
(下個版本提供DEMO)SerializeHelper用於存儲同步 屏幕保存狀態,下次打開程序,自動將窗口放到對應的顯示器上。
TreeViewHelper暫時是TreeView類的動畫實現的輔助,有些方法,可以嘗試試用下,主要操作TreeView。
(下個版本將移除)VistaGlassHelper用於win7毛玻璃效果
WebBrowerHelper用於從瀏覽器打開http地址
WpfTreeHelper核心wpf輔助類,用於替代VisualTreeHelper,支持數據模板中找控件,支持控件模板找控件等

EnumHelper用於獲得枚舉值上方的Description特性值,或者將枚舉轉換成鍵值對集合
AyIcons用來包裝返回一個路徑的BitmapImage類型的對象,主要用於返回圖片方式的圖標
一個很常用的類 SolidColorBrushConverter, 用於顏色轉畫刷,使用方法,例如
    SolidColorBrushConverter.From16JinZhi("#FFCCCCCC"),返回Brush類型
    SolidColorBrushConverter.ToColor("#FFCCCCCC")或者SolidColorBrushConverter.ToColor("FFCCCCCC"),返回System.Windows.Media.Color類型。
ImageHelper類用於處理裁剪圖片,壓縮圖片
AyColorHelper類用於調整顏色
調整透明度 System.Windows.Media.Color ConvertColorA(this System.Windows.Media.Color color, double opacity)
調整亮度和暗度 System.Windows.Media.Color ConvertBright(this System.Windows.Media.Color color, double ratio),ratio大於1變亮,小於1 變暗
FontAweSomeHelper.GetUnicode用於返回AyFontAweSomeEnum值上方的Description,Unicode值用於顯示 圖標字體。(使用者不用關心它)
AyColorUtilities類用於ConvertHsvToRgb,ConvertRgbToHsv處理顏色
DragInCanvasBehavior 拖拽行為,用於Canvas中的元素添加行為,即可拖動,不會拖出空間邊緣,此效果項目中用在了Uc_HKControl控件中了。


為了完成這個作品,我也是熬了好多夜晚,放棄了很多的周末,有人說WPF廢了,但我的覺的WIN10是新的開始,以后可能更多的移動端的用戶體驗放到了PC上。下面的vs2015的文章可能對你有幫助,最后一個變化是我在外國學的,中國可能知道的很少

[AY博客] AY陪你第一時間走進Visual Studio 2015-探究WPF的變化,美化了[1]

[AY博客] AY陪你第一時間走進Visual Studio 2015-探究C#6.0語法這塊的變化2

[AY博客]VS2015安裝問題及解決辦法補充

[AY博客] AY陪你第一時間走進Visual Studio 2015-探究 寫代碼的 這塊的變化3

[AY博客]用VS2015開發ASP.NET 5[1]

[AY原創博客] AY陪你第一時間走進Visual Studio 2015-xaml開發者的重大變化4

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM