{"id":28661,"date":"2024-11-25T12:52:12","date_gmt":"2024-11-25T04:52:12","guid":{"rendered":"https:\/\/fwq.ai\/blog\/28661\/"},"modified":"2024-11-25T12:52:12","modified_gmt":"2024-11-25T04:52:12","slug":"%e7%94%a8wpf%e5%ae%9e%e7%8e%b0%e5%be%ae%e4%bf%a1%e5%85%ac%e4%bc%97%e5%8f%b7%e5%a4%9a%e5%ae%a2%e6%9c%8d%e5%8a%9f%e8%83%bd","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/28661\/","title":{"rendered":"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd"},"content":{"rendered":"<p><strong>\u539f\u6587\u6807\u9898\uff1a\u7528wpf\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd&nbsp;<\/strong><\/p>\n<p><strong>\u7b80\u4ecb\uff1a<\/strong><\/p>\n<p>\u3000\u3000\u8fd9\u662f\u5229\u7528WPF\u4f5c\u4e3a\u524d\u7aef\u6280\u672f\uff0c\u5b9e\u73b0\u684c\u9762\u7248\u5fae\u4fe1\u591a\u5ba2\u670d\u7cfb\u7edf\u3002\u9879\u76ee\u91c7\u7528Prism\u4f5c\u4e3a\u524d\u7aef\u6846\u67b6\uff0c\u91c7\u7528MVVM\u6a21\u5f0f\u6781\u597d\u7684\u5bf9UI\u548c\u903b\u8f91\u4ee3\u7801\u5206\u79bb\uff0c\u4f7f\u7528MefBootstrapper\u96c6\u6210\u7684MEF IOC\u5bb9\u5668\uff0c\u89e3\u8026\u5404\u6a21\u5757\u5bf9\u8c61\u3002\u5408\u7406\u5229\u7528&nbsp;IEventAggregator \u5b9e\u73b0\u4e8b\u4ef6\u548c\u4ea4\u4e92\u3002\u6587\u7ae0\u5728\u4ecb\u7ecd\u5bf9\u5e94\u529f\u80fd\u65f6\u5019\u4f1a\u7ed9\u51fa\u76f8\u5173\u5b9e\u73b0\u7684\u53c2\u8003\uff0c\u8bfb\u8005\u53ef\u4ee5\u53c2\u8003\u6539\u8fdb\uff0c\u5f15\u5165\u5230\u81ea\u5df1\u7684\u9879\u76ee\u4e2d\u3002<\/p>\n<p>\u7a0b\u5e8f\u8fd0\u884c\u754c\u9762\u53ca\u529f\u80fd\u9884\u89c8\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/511007b5f32a277f79a8d10d4a6768d8-0.gif\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><strong><span style=\"line-height: 1.5\">\u4e00\u3001\u767b\u9646\uff1a<\/span><\/strong><\/p>\n<p>\u529f\u80fd\uff1a\u652f\u6301\u8bb0\u4f4f\u7528\u6237\u548c\u7528\u6237\u8bbe\u7f6e\uff0c\u53ef\u9009\u62e9\u8bb0\u4f4f\u7528\u6237\u5bc6\u7801\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/c97a5e3702ee6cc8ee821482b35953ed-1.gif\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe1\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe1\" \/><\/p>\n<p>\u5b9e\u73b0\u76f8\u5173\uff1a<\/p>\n<p>\u81ea\u5b9a\u4e49\u767b\u9646\u7a97\u53e3\uff0c\u5f15\u5165Microsoft.Windows.Shell\u3002\u53ef\u53c2\u8003&nbsp;WPF Custom Chrome Library&nbsp;\u548c&nbsp;&nbsp;MSDN&nbsp;WindowChrome Class<span style=\"line-height: 1.5\">&nbsp;\u6709\u76f8\u5173\u81ea\u5b9a\u4e49\u7a97\u53e3\u5b9e\u73b0\u3002<\/span><\/p>\n<p><span style=\"line-height: 1.5\">\u6700\u5c0f\u5316\u3001\u6700\u5927\u5316\u3001\u5173\u95ed\u6309\u94ae\u529f\u80fd\u5b9e\u73b0\u53ef\u53c2\u8003\u4e0a\u9762\u7684\u4f8b\u5b50\u3002<\/span><\/p>\n<p><span style=\"line-height: 1.5\">\u767b\u9646\u6309\u94ae\uff0c\u81ea\u5b9a\u4e49Style\uff0c\u91cd\u5199Button\u7684Template\uff0c\u53c2\u8003\u4ee3\u7801\u5982\u4e0b\uff1a<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/afefe3d42ec5b91a6ac908022adf9cb1-2.gif\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe2\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe2\" \/><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/afefe3d42ec5b91a6ac908022adf9cb1-3.gif\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe3\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe3\" \/><\/p>\n<\/p>\n<pre> &lt;Style x:Key=\"LogginButton\" TargetType=\"{x:Type Button}\"&gt;\r\n        &lt;Setter Property=\"Template\"&gt;\r\n            &lt;Setter.Value&gt;\r\n                &lt;ControlTemplate TargetType=\"{x:Type Button}\"&gt;\r\n                    &lt;Grid  &gt;\r\n                        &lt;Border   x:Name=\"Bd\" Background=\"{TemplateBinding Background }\" BorderBrush=\"#d3d3d3\" BorderThickness=\"1\"&gt;\r\n                        &lt;\/Border&gt;\r\n                        &lt;ContentPresenter  x:Name=\"contentPresenter\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" RecognizesAccessKey=\"True\"\/&gt;\r\n                    &lt;\/Grid&gt;\r\n                    &lt;ControlTemplate.Triggers&gt;\r\n                        &lt;Trigger Property=\"IsMouseOver\" Value=\"True\"&gt;\r\n                            &lt;Setter TargetName=\"Bd\" Property=\"BorderBrush\" Value=\"#08bd14\"\/&gt;\r\n                            &lt;Setter TargetName=\"Bd\" Property=\"Opacity\" Value=\"0.8\"\/&gt;\r\n                        &lt;\/Trigger&gt;\r\n                        &lt;Trigger Property=\"IsPressed\" Value=\"True\"&gt;\r\n                            &lt;Setter TargetName=\"Bd\" Property=\"Background\" Value=\"#f3f3f3\"\/&gt;\r\n                            &lt;Setter TargetName=\"contentPresenter\" Property=\"Margin\" Value=\"2,2,0,0\"\/&gt;\r\n                        &lt;\/Trigger&gt;\r\n                    &lt;\/ControlTemplate.Triggers&gt;\r\n                &lt;\/ControlTemplate&gt;\r\n            &lt;\/Setter.Value&gt;\r\n        &lt;\/Setter&gt;\r\n    &lt;\/Style&gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p><span>View Code<\/span><\/p>\n<p>\u8bb0\u4f4f\u5bc6\u7801\uff0c\u91c7\u7528&nbsp;XmlSerializer \u628a\u7528\u6237\u4fe1\u606f\u5e8f\u5217\u5316\u5230\u672c\u5730xml\u914d\u7f6e\u6587\u4ef6\u4e2d\uff0c\u7a0b\u5e8f\u542f\u52a8\u65f6\u52a0\u8f7d\u8be5xml\u914d\u7f6e\u6587\u4ef6\u3002\u7528\u6cd5&nbsp;MSDN&nbsp;XmlSerializer&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u4e8c\u3001\u804a\u5929\u7a97\u53e3\uff0c\u4fe1\u606f\u53d1\u9001<\/strong><\/p>\n<p>\u529f\u80fd\uff1a\u6587\u5b57\u53d1\u9001\uff0c\u8868\u60c5\u53d1\u9001\uff0c\u56fe\u7247\u53d1\u9001\uff0c\u5c4f\u5e55\u622a\u56fe\uff0c\u5feb\u6377\u56de\u590d<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/afefe3d42ec5b91a6ac908022adf9cb1-4.gif\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe4\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe4\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>RichTextBox&nbsp;\u76f8\u5173\u5b9e\u73b0\uff1a\u6587\u5b57\uff0c\u8868\u60c5\uff0c\u56fe\u7247\u6240\u6709\u8f93\u5165\u90fd\u662f\u5728\u5bcc\u6587\u672c\u6846 \u91cc\u5b9e\u73b0\uff0c\u56e0\u6b64\u9488\u5bf9&nbsp;TextChanged \u4e8b\u4ef6\u5bf9\u8f93\u5165\u8fdb\u884c\u4e00\u7cfb\u5217\u5904\u7406\u3002<\/p>\n<p>\u6587\u5b57\uff1a\u4e0d\u7528\u505a\u4efb\u4f55\u5904\u7406\u3002<\/p>\n<p>\u8868\u60c5\uff1a\u6587\u672c\u6846\u91cc\u8f93\u5165\u7684\u662f\u8868\u60c5\u7684\u8f6c\u4e49\u7b26\u53f7\uff0c\u7136\u540e\u6839\u636e\u8f6c\u4e49\u7b26\u53f7\u627e\u5230\u5bf9\u5e94\u8868\u60c5\u56fe\u7247\u8fdb\u884c\u66ff\u6362\u3002InlineUIContainer<\/p>\n<p><span style=\"line-height: 1.5\">Gif \u52a8\u6001\u56fe\uff1aWPF\u4e2d\u4e0d\u652f\u6301Gif\uff0c\u6240\u4ee5\u8981\u7f16\u5199\u81ea\u5b9a\u4e49\u7528\u6237\u63a7\u4ef6\u4f5c\u4e3a\u7528\u6765\u663e\u793agif\u8868\u60c5\u3002<\/span><span style=\"line-height: 1.5\">\u53c2\u8003 \u5468\u94f6\u8f89&nbsp;<\/span>[WPF\u7591\u96be]\u5728WPF\u4e2d\u663e\u793a\u52a8\u6001GIF<\/p>\n<p><span style=\"line-height: 1.5\"><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/afefe3d42ec5b91a6ac908022adf9cb1-5.gif\" class=\"aligncenter\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe5\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe5\" \/><\/span><\/p>\n<p>\u622a\u56fe\u529f\u80fd\uff1a\u6e90\u7801\u5728\u7f51\u4e0a\u627e\u5230\u7684\uff0c\u662fWinform\u7684\u4e00\u4e2a\u622a\u56fe\u3002\u505a\u4e86\u5c0f\u8bb8\u4fee\u6539\u5f15\u8fdb\u5230\u9879\u76ee\u3002<\/p>\n<p>&nbsp;\u53c2\u8003\uff1aC# \u5b9e\u73b0\u5b8c\u6574\u529f\u80fd\u7684\u622a\u56fe\u63a7\u4ef6(4)-\u5b8c\u6574\u7248&nbsp;http:\/\/www.php.cn\/<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u4e09\u3001\u5ba2\u6237\u5217\u8868<\/strong><\/p>\n<p>\u63a7\u4ef6\u4e3a&nbsp;TabControl\uff0c\u91cd\u5199\u4e86TabControl \u7684Style \u548c TabItem\u7684Style<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/afefe3d42ec5b91a6ac908022adf9cb1-2.gif\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe2\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe2\" \/><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/afefe3d42ec5b91a6ac908022adf9cb1-3.gif\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe3\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe3\" \/><\/p>\n<\/p>\n<pre>    &lt;Style x:Key=\"CustomerTabStyle\" TargetType=\"{x:Type TabControl}\"&gt;\r\n        &lt;Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}\"\/&gt;\r\n        &lt;Setter Property=\"Padding\" Value=\"4,4,4,4\"\/&gt;\r\n        &lt;Setter Property=\"Background\" Value=\"#F9F9F9\"\/&gt;\r\n        &lt;Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"\/&gt;\r\n        &lt;Setter Property=\"VerticalContentAlignment\" Value=\"Center\"\/&gt;\r\n        &lt;Setter Property=\"Template\"&gt;\r\n            &lt;Setter.Value&gt;\r\n                &lt;ControlTemplate TargetType=\"{x:Type TabControl}\"&gt;\r\n                    &lt;Grid ClipToBounds=\"true\" SnapsToDevicePixels=\"true\" KeyboardNavigation.TabNavigation=\"Local\"&gt;\r\n                        &lt;Grid.ColumnDefinitions&gt;\r\n                            &lt;ColumnDefinition x:Name=\"ColumnDefinition0\"\/&gt;\r\n                            &lt;ColumnDefinition x:Name=\"ColumnDefinition1\" Width=\"0\"\/&gt;\r\n                        &lt;\/Grid.ColumnDefinitions&gt;\r\n                        &lt;Grid.RowDefinitions&gt;\r\n                            &lt;RowDefinition x:Name=\"RowDefinition0\" Height=\"Auto\"\/&gt;\r\n                            &lt;RowDefinition x:Name=\"RowDefinition1\" Height=\"*\"\/&gt;\r\n                        &lt;\/Grid.RowDefinitions&gt;\r\n                        &lt;TabPanel x:Name=\"HeaderPanel\" Grid.Column=\"0\" Background=\"#f6f6f6\" IsItemsHost=\"true\"  Grid.Row=\"0\" KeyboardNavigation.TabIndex=\"1\" Panel.ZIndex=\"1\"\/&gt;\r\n                        &lt;Border x:Name=\"ContentPanel\"  Background=\"{TemplateBinding Background}\" Grid.Column=\"0\" KeyboardNavigation.DirectionalNavigation=\"Contained\" Grid.Row=\"1\" KeyboardNavigation.TabIndex=\"2\" KeyboardNavigation.TabNavigation=\"Local\"&gt;\r\n                            &lt;ContentPresenter x:Name=\"PART_SelectedContentHost\" ContentSource=\"SelectedContent\"  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"\/&gt;\r\n                        &lt;\/Border&gt;\r\n                    &lt;\/Grid&gt;\r\n                    &lt;ControlTemplate.Triggers&gt;\r\n                        &lt;Trigger Property=\"IsEnabled\" Value=\"false\"&gt;\r\n                            &lt;Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}\"\/&gt;\r\n                        &lt;\/Trigger&gt;\r\n                    &lt;\/ControlTemplate.Triggers&gt;\r\n                &lt;\/ControlTemplate&gt;\r\n            &lt;\/Setter.Value&gt;\r\n        &lt;\/Setter&gt;\r\n    &lt;\/Style&gt;\r\n\r\n    &lt;Style x:Key=\"ConnectedTabItemStyle\" TargetType=\"{x:Type TabItem}\"&gt;\r\n        &lt;Setter Property=\"Foreground\" Value=\"Black\"\/&gt;\r\n        &lt;Setter Property=\"Padding\" Value=\"20,8,20,0\"\/&gt;\r\n        &lt;Setter Property=\"BorderBrush\" Value=\"Transparent\"\/&gt;\r\n        &lt;Setter Property=\"Background\" Value=\"#b9c0cc\"\/&gt;\r\n        &lt;Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"\/&gt;\r\n        &lt;Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\"\/&gt;\r\n        &lt;Setter Property=\"Template\"&gt;\r\n            &lt;Setter.Value&gt;\r\n                &lt;ControlTemplate TargetType=\"{x:Type TabItem}\"&gt;\r\n                    &lt;Grid SnapsToDevicePixels=\"true\"&gt;\r\n                        &lt;Border x:Name=\"Bd\" Background=\"#f6f6f6\" Padding=\"{TemplateBinding Padding}\"&gt;\r\n                            &lt;StackPanel&gt;\r\n                                &lt;Path  Width=\"18\" Height=\"18\"  Stretch=\"Fill\" Fill=\"{TemplateBinding Background}\" Data=\"F1 M 38,19C 43.5417,19 45.9167,22.1667 45.1174,28.8134C 45.8315,29.2229 46.3125,29.9928 46.3125,30.875C 46.3125,31.9545 45.5923,32.8658 44.6061,33.1546C 44.1941,34.623 43.5543,35.9229 42.75,36.9628L 42.75,41.9583C 45.3889,42.4861 47.5,42.75 50.6667,44.3333C 53.8333,45.9167 54.8889,47.3681 57,49.4792L 57,57L 19,57L 19,49.4792C 21.1111,47.3681 22.1667,45.9167 25.3333,44.3333C 28.5,42.75 30.6111,42.4861 33.25,41.9583L 33.25,36.9628C 32.4457,35.9229 31.8059,34.623 31.3939,33.1546C 30.4077,32.8658 29.6875,31.9545 29.6875,30.875C 29.6875,29.9928 30.1685,29.2229 30.8826,28.8134C 30.0833,22.1667 32.4583,19 38,19 Z \"\/&gt;\r\n                                &lt;Border HorizontalAlignment=\"Center\" x:Name=\"BottomBd\" Margin=\"-6,-6,0,0\" Visibility=\"Hidden\"&gt;\r\n                                    &lt;Path  Fill=\"#e1e1e1\" Data=\"M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z\" \/&gt;\r\n                                &lt;\/Border&gt;\r\n                            &lt;\/StackPanel&gt;\r\n                        &lt;\/Border&gt;\r\n                    &lt;\/Grid&gt;\r\n                    &lt;ControlTemplate.Triggers&gt;\r\n                        &lt;Trigger Property=\"IsMouseOver\" Value=\"true\"&gt;\r\n                            &lt;Setter Property=\"Background\" TargetName=\"Bd\" Value=\"#ededef\"\/&gt;\r\n                        &lt;\/Trigger&gt;\r\n                        &lt;Trigger Property=\"IsSelected\" Value=\"true\"&gt;\r\n                            &lt;Setter Property=\"Panel.ZIndex\" Value=\"1\"\/&gt;\r\n                            &lt;Setter Property=\"Background\" TargetName=\"Bd\" Value=\"#ffffff\"\/&gt;\r\n                            &lt;Setter Property=\"Background\" Value=\"#08bd14\"\/&gt;\r\n                            &lt;Setter Property=\"Visibility\" TargetName=\"BottomBd\" Value=\"Visible\"\/&gt;\r\n                        &lt;\/Trigger&gt;\r\n                        &lt;MultiTrigger&gt;\r\n                            &lt;MultiTrigger.Conditions&gt;\r\n                                &lt;Condition Property=\"IsSelected\" Value=\"false\"\/&gt;\r\n                                &lt;Condition Property=\"IsMouseOver\" Value=\"true\"\/&gt;\r\n                            &lt;\/MultiTrigger.Conditions&gt;\r\n                            &lt;Setter Property=\"BorderBrush\" TargetName=\"Bd\" Value=\"#ffffff\"\/&gt;\r\n                        &lt;\/MultiTrigger&gt;\r\n\r\n                    &lt;\/ControlTemplate.Triggers&gt;\r\n                &lt;\/ControlTemplate&gt;\r\n            &lt;\/Setter.Value&gt;\r\n        &lt;\/Setter&gt;\r\n    &lt;\/Style&gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p><span>View Code<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/987207a32e67e3dd5a8786317a60bab5-8.gif\" class=\"aligncenter\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe6\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe6\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u56db\u3001\u5feb\u6377\u56de\u590d\u9762\u677f<\/strong><\/p>\n<p>\u5e94\u7528&nbsp;TreeView \u52a0&nbsp;HierarchicalDataTemplate \u5b9e\u73b0\u6811\u5f62\u5217\u8868\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/987207a32e67e3dd5a8786317a60bab5-9.gif\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe7\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe7\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u4e94\u3001\u8f6c\u63a5\u5ba2\u6237<\/strong><\/p>\n<p>\u81ea\u5b9a\u4e49\u8f6c\u63a5\u5ba2\u6237\u7a97\u53e3\uff0c\u6837\u5f0fXaml\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/afefe3d42ec5b91a6ac908022adf9cb1-2.gif\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe2\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe2\" \/><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/afefe3d42ec5b91a6ac908022adf9cb1-3.gif\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe3\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe3\" \/><\/p>\n<\/p>\n<pre>&lt;Style x:Key=\"NoResize_Window\" TargetType=\"{x:Type Window}\"&gt;\r\n                        &lt;Setter Property=\"FontFamily\" Value=\"Consolas,Microsoft YaHei\" \/&gt;\r\n                        &lt;Setter Property=\"ResizeMode\" Value=\"CanMinimize\" \/&gt;\r\n                        &lt;Setter Property=\"Template\"&gt;\r\n                            &lt;Setter.Value&gt;\r\n                                &lt;ControlTemplate TargetType=\"{x:Type Window}\"&gt;\r\n                                    &lt;Grid&gt;\r\n                                        &lt;Grid.RowDefinitions&gt;\r\n                                            &lt;RowDefinition Height=\"30\" \/&gt;\r\n                                            &lt;RowDefinition Height=\"*\" \/&gt;\r\n                                        &lt;\/Grid.RowDefinitions&gt;\r\n                                        &lt;Border Grid.Row=\"0\"  &gt;\r\n                                            &lt;Border.Background&gt;\r\n                                                &lt;LinearGradientBrush StartPoint=\"0,0\" EndPoint=\"0,1\"&gt;\r\n                                                    &lt;GradientStop Color=\"#494A52\" Offset=\"0\"\/&gt;\r\n                                                    &lt;GradientStop Color=\"#45464f\" Offset=\"1\"\/&gt;\r\n                                                &lt;\/LinearGradientBrush&gt;\r\n                                            &lt;\/Border.Background&gt;\r\n                                            &lt;Grid&gt;\r\n                                                &lt;!--Icon and Title--&gt;\r\n                                                &lt;DockPanel     &gt;\r\n                                                    &lt;TextBlock Margin=\"12,0,0,0\" Text=\"{TemplateBinding Title}\" FontFamily=\"Calibri\"  VerticalAlignment=\"Center\" Foreground=\"#FFFFFF\" \/&gt;\r\n                                                    &lt;StackPanel HorizontalAlignment=\"Right\" Orientation=\"Horizontal\" VerticalAlignment=\"Top\"&gt;\r\n                                                        &lt;ctrl:MinAndCloseCaptionButton&gt;&lt;\/ctrl:MinAndCloseCaptionButton&gt;\r\n                                                    &lt;\/StackPanel&gt;\r\n                                                &lt;\/DockPanel&gt;\r\n                                            &lt;\/Grid&gt;\r\n                                        &lt;\/Border&gt;\r\n\r\n                                        &lt;Grid Grid.Row=\"1\" &gt;\r\n                                            &lt;Border Background=\"{TemplateBinding Background}\"\r\n                                        BorderBrush=\"{TemplateBinding BorderBrush}\"  \r\n                                        BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                        Padding=\"{TemplateBinding Margin}\"\r\n                                        SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"  &gt;\r\n                                                &lt;ContentPresenter \/&gt;\r\n                                            &lt;\/Border&gt;\r\n                                        &lt;\/Grid&gt;\r\n                                    &lt;\/Grid&gt;\r\n                                &lt;\/ControlTemplate&gt;\r\n                            &lt;\/Setter.Value&gt;\r\n                        &lt;\/Setter&gt;\r\n                    &lt;\/Style&gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p><span>View Code<\/span><\/p>\n<p>\u8f6c\u63a5\u5ba2\u6237\u5217\u8868\uff0c\u6837\u5f0fXaml\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/afefe3d42ec5b91a6ac908022adf9cb1-2.gif\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe2\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe2\" \/><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/afefe3d42ec5b91a6ac908022adf9cb1-3.gif\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe3\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe3\" \/><\/p>\n<\/p>\n<pre>    &lt;Style x:Key=\"OnlineUserListBoxStyle\" TargetType=\"{x:Type ListBox}\"&gt;\r\n        &lt;Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.WindowBrushKey}}\"\/&gt;\r\n        &lt;Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}\"\/&gt;\r\n        &lt;Setter Property=\"ScrollViewer.HorizontalScrollBarVisibility\" Value=\"Auto\"\/&gt;\r\n        &lt;Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Auto\"\/&gt;\r\n        &lt;Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"true\"\/&gt;\r\n        &lt;Setter Property=\"ScrollViewer.PanningMode\" Value=\"Both\"\/&gt;\r\n        &lt;Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"\/&gt;\r\n        &lt;Setter Property=\"VerticalContentAlignment\" Value=\"Center\"\/&gt;\r\n        &lt;Setter Property=\"Template\"&gt;\r\n            &lt;Setter.Value&gt;\r\n                &lt;ControlTemplate TargetType=\"{x:Type ListBox}\"&gt;\r\n                    &lt;Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" Padding=\"1\" SnapsToDevicePixels=\"true\"&gt;\r\n                        &lt;DockPanel&gt;\r\n                            &lt;Border BorderBrush=\"#dbdbdb\" BorderThickness=\"0,0,0,1\" DockPanel.Dock=\"Top\"&gt;\r\n                                &lt;Grid Background=\"#f6f6f6\"  TextElement.Foreground=\"#999999\" DockPanel.Dock=\"Top\"&gt;\r\n                                    &lt;Grid.ColumnDefinitions&gt;\r\n                                        &lt;ColumnDefinition Width=\"*\" \/&gt;\r\n                                        &lt;ColumnDefinition Width=\"*\"\/&gt;\r\n                                        &lt;ColumnDefinition Width=\"*\"\/&gt;\r\n                                    &lt;\/Grid.ColumnDefinitions&gt;\r\n                                    &lt;TextBlock Margin=\"5,7,0,6\" Grid.Column=\"0\"&gt;\u72b6\u6001&lt;\/TextBlock&gt;\r\n                                    &lt;TextBlock Margin=\"5,7,0,6\" Grid.Column=\"1\"&gt;\u5de5\u53f7&lt;\/TextBlock&gt;\r\n                                    &lt;TextBlock Margin=\"5,7,0,6\" Grid.Column=\"2\"&gt;\u6635\u79f0&lt;\/TextBlock&gt;\r\n                                &lt;\/Grid&gt;\r\n                            &lt;\/Border&gt;\r\n                            &lt;ScrollViewer Focusable=\"false\" Padding=\"{TemplateBinding Padding}\"&gt;\r\n                                &lt;ItemsPresenter SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"\/&gt;\r\n                            &lt;\/ScrollViewer&gt;\r\n                        &lt;\/DockPanel&gt;\r\n                    &lt;\/Border&gt;\r\n                    &lt;ControlTemplate.Triggers&gt;\r\n                        &lt;Trigger Property=\"IsEnabled\" Value=\"false\"&gt;\r\n                            &lt;Setter Property=\"Background\" TargetName=\"Bd\" Value=\"{DynamicResource {x:Static SystemColors.ControlBrushKey}}\"\/&gt;\r\n                        &lt;\/Trigger&gt;\r\n                    &lt;\/ControlTemplate.Triggers&gt;\r\n                &lt;\/ControlTemplate&gt;\r\n            &lt;\/Setter.Value&gt;\r\n        &lt;\/Setter&gt;\r\n    &lt;\/Style&gt;\r\n    &lt;Style x:Key=\"OnlineUserListBoxItemStyle\" TargetType=\"{x:Type ListBoxItem}\"&gt;\r\n        &lt;Setter Property=\"Background\" Value=\"Transparent\"\/&gt;\r\n        &lt;Setter Property=\"HorizontalContentAlignment\" Value=\"{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}\"\/&gt;\r\n        &lt;Setter Property=\"VerticalContentAlignment\" Value=\"{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}\"\/&gt;\r\n        &lt;Setter Property=\"Padding\" Value=\"2,0,0,0\"\/&gt;\r\n        &lt;Setter Property=\"Template\"&gt;\r\n            &lt;Setter.Value&gt;\r\n                &lt;ControlTemplate TargetType=\"{x:Type ListBoxItem}\"&gt;\r\n                    &lt;Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" Padding=\"{TemplateBinding Padding}\" SnapsToDevicePixels=\"true\"&gt;\r\n                        &lt;Grid&gt;\r\n                            &lt;Grid.ColumnDefinitions&gt;\r\n                                &lt;ColumnDefinition Width=\"*\" \/&gt;\r\n                                &lt;ColumnDefinition Width=\"*\"\/&gt;\r\n                                &lt;ColumnDefinition Width=\"*\"\/&gt;\r\n                            &lt;\/Grid.ColumnDefinitions&gt;\r\n\r\n                            &lt;StackPanel Grid.Column=\"0\" Orientation=\"Horizontal\" &gt;\r\n                                &lt;Border Margin=\"4,2,4,2\" Height=\"24\" Width=\"24\" &gt;\r\n                                    &lt;Grid&gt;\r\n                                        &lt;Path Fill=\"#6f6f6f\" Data=\"M6,17C6,15 10,13.9 12,13.9C14,13.9 18,15 18,17V18H6M15,9A3,3 0 0,1 12,12A3,3 0 0,1 9,9A3,3 0 0,1 12,6A3,3 0 0,1 15,9M3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3H5C3.89,3 3,3.9 3,5Z\"  \/&gt;\r\n                                        &lt;Path Visibility=\"{Binding Path=IsOnLine,Converter={StaticResource BoolToVisibilityConverter}}\" Fill=\"#8bc34a\" Data=\"M6,17C6,15 10,13.9 12,13.9C14,13.9 18,15 18,17V18H6M15,9A3,3 0 0,1 12,12A3,3 0 0,1 9,9A3,3 0 0,1 12,6A3,3 0 0,1 15,9M3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3H5C3.89,3 3,3.9 3,5Z\" \/&gt;\r\n                                    &lt;\/Grid&gt;\r\n                                &lt;\/Border&gt;\r\n                                &lt;TextBlock Padding=\"4,0,4,0\" VerticalAlignment=\"Center\"  Text=\"{Binding Path=OnLineStatus}\" \/&gt;\r\n                            &lt;\/StackPanel&gt;\r\n                            &lt;StackPanel Grid.Column=\"1\" Orientation=\"Horizontal\"  &gt;\r\n                                &lt;TextBlock Padding=\"4,0,4,0\"  VerticalAlignment=\"Center\" Text=\"{Binding Path=Name}\"\/&gt;\r\n                            &lt;\/StackPanel&gt;\r\n                            &lt;StackPanel Grid.Column=\"2\" Orientation=\"Horizontal\"  &gt;\r\n                                &lt;TextBlock Padding=\"4,0,4,0\"  VerticalAlignment=\"Center\" Text=\"{Binding Path=RealName}\"\/&gt;\r\n                            &lt;\/StackPanel&gt;\r\n                        &lt;\/Grid&gt;\r\n                    &lt;\/Border&gt;\r\n                    &lt;ControlTemplate.Triggers&gt;\r\n                        &lt;Trigger Property=\"IsSelected\" Value=\"true\"&gt;\r\n                            &lt;Setter Property=\"Background\" TargetName=\"Bd\" Value=\"#9ea5b8\"\/&gt;\r\n                            &lt;Setter Property=\"Foreground\" Value=\"#ffffff\"\/&gt;\r\n                        &lt;\/Trigger&gt;\r\n                        &lt;MultiTrigger&gt;\r\n                            &lt;MultiTrigger.Conditions&gt;\r\n                                &lt;Condition Property=\"IsSelected\" Value=\"false\" \/&gt;\r\n                                &lt;Condition Property=\"IsMouseOver\" Value=\"true\" \/&gt;\r\n                            &lt;\/MultiTrigger.Conditions&gt;\r\n                            &lt;Setter Property=\"Background\" TargetName=\"Bd\" Value=\"#e0e1e5\"\/&gt;\r\n                        &lt;\/MultiTrigger&gt;\r\n                        &lt;Trigger Property=\"IsEnabled\" Value=\"false\"&gt;\r\n                            &lt;Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}\"\/&gt;\r\n                        &lt;\/Trigger&gt;\r\n                    &lt;\/ControlTemplate.Triggers&gt;\r\n                &lt;\/ControlTemplate&gt;\r\n            &lt;\/Setter.Value&gt;\r\n        &lt;\/Setter&gt;\r\n    &lt;\/Style&gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p><span>View Code<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/fc31b23e85a09870f7082c2bd987ebd6-14.gif\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe8\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe8\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>\u5173\u4e8e\u4ee5\u4e0a\u63a7\u4ef6\u7684\u4e8b\u4ef6\u4e0e\u547d\u4ee4\uff0c\u5f15\u8fdbSystem.Windows.Interactivity.<\/p>\n<p>\u5728Xmal\u4e2d\u5bfc\u5165\u547d\u540d\u63a7\u4ef6&nbsp;xmlns:i=&#8221;http:\/\/schemas.microsoft.com\/expression\/2010\/interactivity&#8221;<\/p>\n<p>\u4f7f\u7528\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/afefe3d42ec5b91a6ac908022adf9cb1-2.gif\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe2\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe2\" \/><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/afefe3d42ec5b91a6ac908022adf9cb1-3.gif\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe3\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe3\" \/><\/p>\n<\/p>\n<pre>                &lt;ListBox Margin=\"12,0,12,0\" BorderThickness=\"1\" \r\n                                 Style=\"{DynamicResource OnlineUserListBoxStyle}\" \r\n                                 ItemContainerStyle=\"{DynamicResource OnlineUserListBoxItemStyle}\"\r\n                                 ItemsSource=\"{Binding Path= AllUsers}\"\r\n                                 SelectedItem=\"{Binding Path=SelectedUser}\"\r\n                                 &gt;\r\n                    &lt;i:Interaction.Triggers&gt;\r\n                        &lt;i:EventTrigger EventName=\"SelectionChanged\"&gt;\r\n                            &lt;i:InvokeCommandAction Command=\"{Binding Path= UserSelectedChangedCommand}\" \/&gt;\r\n                        &lt;\/i:EventTrigger&gt;\r\n                    &lt;\/i:Interaction.Triggers&gt;\r\n                &lt;\/ListBox&gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p><span>View Code<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>\u7cfb\u7edf\u8fd0\u884c\u622a\u56fe\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/164\/2a3a73d8f91b062ec4e727182e80b996-17.gif\" style=\"max-width:90%\" class=\"aligncenter\" title=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe9\" alt=\"\u7528WPF\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd\u63d2\u56fe9\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>\u8bf4\u660e\uff1a<\/p>\n<p>\u7a0b\u5e8fUI\u5e03\u5c40\u53ca\u5c55\u793a\u4e3a\u6a21\u4eff\u5fae\u4fe1\u591a\u5ba2\u670d\u5b98\u65b9\u7a0b\u5e8f\uff0c\u6240\u6709\u6837\u5f0f\u6e90\u7801\u4e3a\u672c\u4eba\u6240\u5199\u53ca\u53c2\u8003\u7f51\u4e0a\u90e8\u5206\u8d44\u6e90\u3002<\/p>\n<p>\u7a0b\u5e8f\u4e2d\u6240\u7528\u56fe\u6807\u6765\u6e90\u4e8e\u8fd9\u4e24\u4e2a\u8d44\u6e90\u5e93\uff1ahttp:\/\/www.php.cn\/ &nbsp;http:\/\/www.php.cn\/<\/p>\n<p>&nbsp;<\/p>\n<p>\u5c0f\u7ed3\uff1a<\/p>\n<p>\u672c\u6587\u53ea\u4f5c\u4e86\u7b80\u5355\u7684\u4ecb\u7ecd\uff0c\u4e3b\u8981\u4ecb\u7ecdUI\u4e0a\u7684\u4e00\u4e9b\u5b9e\u73b0\u548c\u529f\u80fd\u4ecb\u7ecd\u3002\u5177\u4f53\u540e\u53f0\u4e1a\u52a1\u903b\u8f91\u770b\u4ee5\u540e\u80fd\u5426\u8865\u4e0a\uff0c\u5305\u62ecPrism\u4f7f\u7528\uff0c\u548c\u5fae\u4fe1\u516c\u4f17\u53f7\u76f8\u5173\u7684\u77e5\u8bc6\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u535a\u5ba2\u5730\u5740\uff1ahttp:\/\/www.php.cn\/<br \/>\u535a\u5ba2\u7248\u6743\uff1a\u672c\u6587\u4ee5\u5b66\u4e60\u3001\u7814\u7a76\u548c\u5206\u4eab\u4e3a\u4e3b\uff0c\u6b22\u8fce\u8f6c\u8f7d\uff0c\u4f46\u5fc5\u987b\u5728\u6587\u7ae0\u9875\u9762\u660e\u663e\u4f4d\u7f6e\u6807\u660e\u539f\u6587\u8fde\u63a5\u5e76\u4fdd\u7559\u6b64\u5904\u8bf4\u660e\u3002<br \/>\u5982\u679c\u6587\u4e2d\u6709\u4e0d\u59a5\u6216\u8005\u9519\u8bef\u7684\u5730\u65b9\u8fd8\u671b\u60a8\u6307\u51fa\uff0c\u4ee5\u514d\u8ba9\u8bfb\u8005\u4ea7\u751f\u8bef\u89e3\u3002<br \/>\u611f\u8c22\u60a8\u7684\u9605\u8bfb\uff0c\u559c\u6b22\u5c31\u70b9\u4e2a\u8d5e\uff0c\u3010\u63a8\u8350\u3011\u4e00\u4e0b\uff01<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u539f\u6587\u6807\u9898\uff1a\u7528wpf\u5b9e\u73b0\u5fae\u4fe1\u516c\u4f17\u53f7\u591a\u5ba2\u670d\u529f\u80fd&nbsp; \u7b80\u4ecb\uff1a \u3000\u3000\u8fd9\u662f\u5229\u7528WPF\u4f5c\u4e3a\u524d\u7aef\u6280\u672f\uff0c\u5b9e\u73b0\u684c\u9762\u7248\u5fae\u4fe1\u591a\u5ba2\u670d\u7cfb\u7edf\u3002\u9879\u76ee\u91c7\u7528Prism\u4f5c\u4e3a\u524d\u7aef\u6846\u67b6\uff0c\u91c7\u7528MVVM\u6a21\u5f0f\u6781\u597d\u7684\u5bf9UI\u548c\u903b\u8f91\u4ee3\u7801\u5206\u79bb\uff0c\u4f7f\u7528MefBootstrapper\u96c6\u6210\u7684MEF IOC\u5bb9\u5668\uff0c\u89e3\u8026\u5404\u6a21\u5757\u5bf9\u8c61\u3002\u5408\u7406\u5229\u7528&nbsp;IEventAggregator \u5b9e\u73b0\u4e8b\u4ef6\u548c\u4ea4\u4e92\u3002\u6587\u7ae0\u5728\u4ecb\u7ecd\u5bf9\u5e94\u529f\u80fd\u65f6\u5019\u4f1a\u7ed9\u51fa\u76f8\u5173\u5b9e\u73b0\u7684\u53c2\u8003\uff0c\u8bfb\u8005\u53ef\u4ee5\u53c2\u8003\u6539\u8fdb\uff0c\u5f15\u5165\u5230\u81ea\u5df1\u7684\u9879\u76ee\u4e2d\u3002 \u7a0b\u5e8f\u8fd0\u884c\u754c\u9762\u53ca\u529f\u80fd\u9884\u89c8\uff1a &nbsp; \u4e00\u3001\u767b\u9646\uff1a \u529f\u80fd\uff1a\u652f\u6301\u8bb0\u4f4f\u7528\u6237\u548c\u7528\u6237\u8bbe\u7f6e\uff0c\u53ef\u9009\u62e9\u8bb0\u4f4f\u7528\u6237\u5bc6\u7801\u3002 \u5b9e\u73b0\u76f8\u5173\uff1a \u81ea\u5b9a\u4e49\u767b\u9646\u7a97\u53e3\uff0c\u5f15\u5165Microsoft.Windows.Shell\u3002\u53ef\u53c2\u8003&nbsp;WPF Custom Chrome Library&nbsp;\u548c&nbsp;&nbsp;MSDN&nbsp;WindowChrome Class&nbsp;\u6709\u76f8\u5173\u81ea\u5b9a\u4e49\u7a97\u53e3\u5b9e\u73b0\u3002 \u6700\u5c0f\u5316\u3001\u6700\u5927\u5316\u3001\u5173\u95ed\u6309\u94ae\u529f\u80fd\u5b9e\u73b0\u53ef\u53c2\u8003\u4e0a\u9762\u7684\u4f8b\u5b50\u3002 \u767b\u9646\u6309\u94ae\uff0c\u81ea\u5b9a\u4e49Style\uff0c\u91cd\u5199Button\u7684Template\uff0c\u53c2\u8003\u4ee3\u7801\u5982\u4e0b\uff1a &lt;Style x:Key=&#8221;LogginButton&#8221; TargetType=&#8221;{x:Type Button}&#8221;&gt; &lt;Setter Property=&#8221;Template&#8221;&gt; &lt;Setter.Value&gt; &lt;ControlTemplate TargetType=&#8221;{x:Type Button}&#8221;&gt; &lt;Grid &gt; &lt;Border x:Name=&#8221;Bd&#8221; Background=&#8221;{TemplateBinding Background }&#8221; BorderBrush=&#8221;#d3d3d3&#8243; BorderThickness=&#8221;1&#8243;&gt; &lt;\/Border&gt; &lt;ContentPresenter x:Name=&#8221;contentPresenter&#8221; HorizontalAlignment=&#8221;{TemplateBinding HorizontalContentAlignment}&#8221; VerticalAlignment=&#8221;{TemplateBinding VerticalContentAlignment}&#8221; SnapsToDevicePixels=&#8221;{TemplateBinding SnapsToDevicePixels}&#8221; RecognizesAccessKey=&#8221;True&#8221;\/&gt; &lt;\/Grid&gt; &lt;ControlTemplate.Triggers&gt; &lt;Trigger Property=&#8221;IsMouseOver&#8221; Value=&#8221;True&#8221;&gt; &lt;Setter TargetName=&#8221;Bd&#8221; Property=&#8221;BorderBrush&#8221; Value=&#8221;#08bd14&#8243;\/&gt; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-28661","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/28661","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=28661"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/28661\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=28661"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=28661"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=28661"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}