<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>前端 on Zeros遇见的作品集合</title><link>https://zeroszhang.github.io/tags/%E5%89%8D%E7%AB%AF/</link><description>Recent content in 前端 on Zeros遇见的作品集合</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>Zeros遇见</copyright><lastBuildDate>Fri, 17 Jan 2025 11:25:07 +0800</lastBuildDate><atom:link href="https://zeroszhang.github.io/tags/%E5%89%8D%E7%AB%AF/index.xml" rel="self" type="application/rss+xml"/><item><title>BaseWPFControl</title><link>https://zeroszhang.github.io/p/basewpfcontrol/</link><pubDate>Fri, 17 Jan 2025 11:25:07 +0800</pubDate><guid>https://zeroszhang.github.io/p/basewpfcontrol/</guid><description>&lt;img src="https://zeroszhang.github.io/p/basewpfcontrol/assets/cover.jpg" alt="Featured image of post BaseWPFControl" /&gt;&lt;h2 id="简介"&gt;&lt;a href="#%e7%ae%80%e4%bb%8b" class="header-anchor"&gt;&lt;/a&gt;简介&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;BaseWPFControl&lt;/code&gt; 是一个 &lt;code&gt;dll&lt;/code&gt;，基于 &lt;code&gt;.net 8.0&lt;/code&gt; 和 &lt;code&gt;WPF&lt;/code&gt; 框架实现，用于提供控件样式（包含基础控件和额外控件）。&lt;/p&gt;&#10;&lt;h2 id="基础控件"&gt;&lt;a href="#%e5%9f%ba%e7%a1%80%e6%8e%a7%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;基础控件&#10;&lt;/h2&gt;&lt;h3 id="button"&gt;&lt;a href="#button" class="header-anchor"&gt;&lt;/a&gt;Button&#10;&lt;/h3&gt;&lt;p&gt;重写了基础控件 &lt;code&gt;Button&lt;/code&gt; 的样式。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;新增 &lt;code&gt;BaseWPFControl:ButtonProperty.Icon&lt;/code&gt; 附加属性用于提供按钮图标&lt;/li&gt;&#10;&lt;li&gt;提供圆角&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Button&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;纯文字按钮&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Button&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;图标&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;BaseWPFControl:ButtonProperty.Icon=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{StaticResource HomePage}&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Button&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;圆形按钮&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{StaticResource CircleButtonStyle}&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Button&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;带图标的圆形按钮&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{StaticResource CircleButtonStyle}&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;BaseWPFControl:ButtonProperty.Icon=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{StaticResource HomePage}&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Button&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;跑道形按钮&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{StaticResource RoundButtonStyle}&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Button&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;图标&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{StaticResource RoundButtonStyle}&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;BaseWPFControl:ButtonProperty.Icon=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{StaticResource HomePage}&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="2671px" data-flex-grow="1113" height="61" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/%E6%99%AE%E9%80%9A%E6%8C%89%E9%92%AE-1748076976389-59.png" width="679"&gt;&lt;/p&gt;&#10;&lt;p&gt;针对不启用和不可点击的按钮，做出了区分，分别对应 &lt;code&gt;IsEnabled&lt;/code&gt; 和 &lt;code&gt;IsHitTestVisible&lt;/code&gt; 属性。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Button&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;不启用&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsEnabled=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;False&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Button&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;不可点击&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsHitTestVisible=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;False&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="1308px" data-flex-grow="545" height="51" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/Button%E5%8C%BA%E5%88%86%E4%B8%8D%E5%90%AF%E7%94%A8%E5%92%8C%E4%B8%8D%E5%8F%AF%E7%82%B9%E5%87%BB-1748076976389-60.png" width="278"&gt;&lt;/p&gt;&#10;&lt;p&gt;之所以这样去做目的是为了 &lt;code&gt;GPIO&lt;/code&gt; 的控制，&lt;code&gt;GPI&lt;/code&gt; 不可点击，&lt;code&gt;GPO&lt;/code&gt; 可点击。&lt;/p&gt;&#10;&lt;p&gt;提供了两种相似的样式 &lt;code&gt;BooleanStateButtonStyle&lt;/code&gt; 和 &lt;code&gt;BooleanToggleButtonStyle&lt;/code&gt;。前者对应于 &lt;code&gt;GPI&lt;/code&gt;，不可点击，仅用于展示 &lt;code&gt;GPI&lt;/code&gt; 状态，后者对应于 &lt;code&gt;GPO&lt;/code&gt;，既可以展示 &lt;code&gt;GPO&lt;/code&gt; 状态，又可以通过点击切换状态。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Button&lt;/span&gt; &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{StaticResource BooleanStateButtonStyle}&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;Tag=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding State}&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Button&lt;/span&gt; &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{StaticResource BooleanToggleButtonStyle}&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;Tag=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding State}&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Command=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding ChangeStateCommand}&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="519px" data-flex-grow="216" height="55" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/ButtonStateToggle%E5%85%B3%E9%97%AD-1748076976389-61.png" width="119"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="519px" data-flex-grow="216" height="55" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/ButtonStateToggle%E5%BC%80%E5%90%AF-1748076976389-64.png" width="119"&gt;&lt;/p&gt;&#10;&lt;h3 id="togglebutton"&gt;&lt;a href="#togglebutton" class="header-anchor"&gt;&lt;/a&gt;ToggleButton&#10;&lt;/h3&gt;&lt;p&gt;基于 &lt;code&gt;ToggleButton&lt;/code&gt; 重写样式，该控件的本意是用于 &lt;code&gt;GPIO&lt;/code&gt; 的控制&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ToggleButton&lt;/span&gt; &lt;span class="na"&gt;IsChecked=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding State}&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ToggleButton&lt;/span&gt; &lt;span class="na"&gt;IsChecked=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding State}&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsEnabled=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;False&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="933px" data-flex-grow="389" height="55" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/ToggleButton%E5%85%B3%E9%97%AD-1748076976389-62.png" width="214"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="933px" data-flex-grow="389" height="55" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/ToggleButton%E5%BC%80%E5%90%AF-1748076976389-63.png" width="214"&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;最终方案如下：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;GPI&lt;/code&gt; 使用 &lt;code&gt;Button&lt;/code&gt; 的 &lt;code&gt;BooleanStateButtonStyle&lt;/code&gt; 样式&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;GPO&lt;/code&gt; 使用 &lt;code&gt;ToggleButton&lt;/code&gt; 的默认样式。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="radiobutton"&gt;&lt;a href="#radiobutton" class="header-anchor"&gt;&lt;/a&gt;RadioButton&#10;&lt;/h3&gt;&lt;p&gt;重写 RadioButton 的样式，主要优化如下：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;勾选后样式变化&lt;/li&gt;&#10;&lt;li&gt;勾选框尺寸跟随字体尺寸变化&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;RadioButton&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;未勾选&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;RadioButton&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;勾选&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsChecked=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;True&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;RadioButton&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;未勾选未启用&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsEnabled=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;False&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsChecked=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;False&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;RadioButton&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;勾选未启用&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsEnabled=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;False&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsChecked=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;True&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;RadioButton&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;大字体&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;FontSize=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;30&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="3229px" data-flex-grow="1345" height="44" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/RadioButton-1748076976389-65.png" width="592"&gt;&lt;/p&gt;&#10;&lt;h3 id="checkbox"&gt;&lt;a href="#checkbox" class="header-anchor"&gt;&lt;/a&gt;CheckBox&#10;&lt;/h3&gt;&lt;p&gt;重写 CheckBox 的样式，主要优化如下：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;勾选后样式变化&lt;/li&gt;&#10;&lt;li&gt;勾选框圆角&lt;/li&gt;&#10;&lt;li&gt;勾选框尺寸跟随字体尺寸变化&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;CheckBox&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;未勾选&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;CheckBox&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;勾选&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsChecked=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;True&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;CheckBox&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;未勾选未启用&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsEnabled=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;False&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsChecked=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;False&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;CheckBox&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;勾选未启用&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsEnabled=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;False&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsChecked=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;True&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;CheckBox&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;大字体&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;FontSize=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;30&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="3229px" data-flex-grow="1345" height="44" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/CheckBox-1748076976389-68.png" width="592"&gt;&lt;/p&gt;&#10;&lt;h3 id="combobox"&gt;&lt;a href="#combobox" class="header-anchor"&gt;&lt;/a&gt;ComboBox&#10;&lt;/h3&gt;&lt;p&gt;重写 ComboBox 样式，主要优化如下：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;圆角属性&lt;/li&gt;&#10;&lt;li&gt;提供 ComboBox 绑定枚举值的扩展语法 EnumBindingSource&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--示例1：ComboBox绑定枚举值--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ComboBox&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;120&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;ItemsSource=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{BaseWPFControl:EnumBindingSource &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; EnumType=BaseTest:EnumDayOfWeek}&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;SelectedItem=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding SelectedEnumDayOfWeek}&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;ComboBox.ItemTemplate&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;DataTemplate&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;TextBlock&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; Converter={StaticResource EnumToDescriptionConverter}, &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; Mode=OneWay}&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/DataTemplate&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/ComboBox.ItemTemplate&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/ComboBox&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--示例2：不启用ComboBox--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ComboBox&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;120&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsEnabled=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;False&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;ComboBoxItem&lt;/span&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsSelected=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;True&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/ComboBox&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--示例3：ComboBox绑定字典--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--note：需要设置 DisplayMemberPath 和 SelectedValuePath，--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--note：并只能使用 SelectedValue 进行访问--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ComboBox&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;120&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;ItemsSource=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding DictionaryDayOfWeek}&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;DisplayMemberPath=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Value&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;SelectedValuePath=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Key&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;SelectedValue=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding SelectedDictionaryDayOfWeek}&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--示例4：ComboBox绑定列表--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--note：使用 SelectedItem 或者 SelectedValue 都可以获得正确结果--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--note: 前提是绑定的值在列表中，也可以通过 SelectedIndex 进行访问--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ComboBox&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;120&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;ItemsSource=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding ListDayOfWeek}&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;SelectedItem=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding SelectedListDayOfWeek}&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="523px" data-flex-grow="218" height="262" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/ComboBox-1748076976389-66.png" width="572"&gt;&lt;/p&gt;&#10;&lt;h3 id="textblock"&gt;&lt;a href="#textblock" class="header-anchor"&gt;&lt;/a&gt;TextBlock&#10;&lt;/h3&gt;&lt;p&gt;重写 &lt;code&gt;TextBlock&lt;/code&gt; 的样式，主要优化如下：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;中英文使用不同的字体显示，中文使用&lt;code&gt;微软雅黑&lt;/code&gt;，英文使用&lt;code&gt;Consolas&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;TextBlock&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;显示中文&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;TextBlock&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Show English&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="1661px" data-flex-grow="692" height="38" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/TextBlock-1748076976389-69.png" width="263"&gt;&lt;/p&gt;&#10;&lt;h3 id="memoryblock"&gt;&lt;a href="#memoryblock" class="header-anchor"&gt;&lt;/a&gt;MemoryBlock&#10;&lt;/h3&gt;&lt;p&gt;该控件为自定义控件，主要实现以下功能：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;获取当前软件已使用内存，以 &lt;code&gt;MB&lt;/code&gt; 为单位&lt;/li&gt;&#10;&lt;li&gt;可以通过控件的 &lt;code&gt;Interval&lt;/code&gt; 属性设置更新频率，单位为 &lt;code&gt;ms&lt;/code&gt;，默认为 &lt;code&gt;1000 ms&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;可以通过控件的 &lt;code&gt;Header&lt;/code&gt; 属性设置前缀文字&lt;/li&gt;&#10;&lt;li&gt;可以通过控件的 &lt;code&gt;UsedMemory&lt;/code&gt; 只读属性获取内存&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;BaseWPFControl:MemoryBlock&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="1661px" data-flex-grow="692" height="38" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/MemoryBlock-1748076976389-67.png" width="263"&gt;&lt;/p&gt;&#10;&lt;h3 id="logblock"&gt;&lt;a href="#logblock" class="header-anchor"&gt;&lt;/a&gt;LogBlock&#10;&lt;/h3&gt;&lt;p&gt;该控件为自定义控件，配合 &lt;code&gt;BaseLogManager&lt;/code&gt; 一起使用，主要实现以下功能：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;显示日志&lt;/li&gt;&#10;&lt;li&gt;提供日志详情页&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;BaseWPFControl:LogBlock&lt;/span&gt; &lt;span class="na"&gt;x:Name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;LogBlock_Test&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ContentControl&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;400&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding ElementName=LogBlock_Test, Path=LogView}&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="547px" data-flex-grow="228" height="485" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/LogBlock-1748076976389-70.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/LogBlock-1748076976389-70_hu_8d012bd3629f1646.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/LogBlock-1748076976389-70.png 1106w" width="1106"&gt;&lt;/p&gt;&#10;&lt;h3 id="textbox"&gt;&lt;a href="#textbox" class="header-anchor"&gt;&lt;/a&gt;TextBox&#10;&lt;/h3&gt;&lt;p&gt;重写 &lt;code&gt;TextBox&lt;/code&gt; 的样式，主要实现以下功能：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;TextBoxProperty.Prefix&lt;/code&gt; 属性设置前缀文字&lt;/li&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;TextBoxProperty.WaterMask&lt;/code&gt; 属性设置水印文字&lt;/li&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;TextBoxProperty.Suffix&lt;/code&gt; 属性设置后缀文字&lt;/li&gt;&#10;&lt;li&gt;输入时边框高亮显示&lt;/li&gt;&#10;&lt;li&gt;大文本输入框可以通过滚动条上下滚动&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;TextBox&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;200&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;BaseWPFControl:TextBoxProperty.Prefix=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;www.&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;BaseWPFControl:TextBoxProperty.Suffix=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.com&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;BaseWPFControl:TextBoxProperty.WaterMask=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;输入网址&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;TextBox&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;160&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;默认文本框&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;TextBox&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;100&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;BaseWPFControl:TextBoxProperty.WaterMask=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;绑定Decimal类型&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding DecimalNumber, StringFormat=0.#}&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;TextBox&lt;/span&gt; &lt;span class="na"&gt;Style=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{StaticResource BigTextBox}&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;400&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;100&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding Poetry1}&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="2227px" data-flex-grow="928" height="57" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/TextBox-1748076976389-75.png" width="529"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="860px" data-flex-grow="358" height="116" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/BitTextBox-1748076976389-71.png" width="416"&gt;&lt;/p&gt;&#10;&lt;h3 id="numericbox"&gt;&lt;a href="#numericbox" class="header-anchor"&gt;&lt;/a&gt;NumericBox&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;NumericBox&lt;/code&gt; 为自定义控件，主要实现以下功能：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;更方便的绑定数字，并提供限制&lt;/li&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;Value&lt;/code&gt; 属性获取/设置值&lt;/li&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;TextFormat&lt;/code&gt; 属性设置文本格式&lt;/li&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;MinValue&lt;/code&gt; 属性设置最小值&lt;/li&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;MaxValue&lt;/code&gt; 属性设置最大值&lt;/li&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;Interval&lt;/code&gt; 属性设置点击增减按钮时的变化量&lt;/li&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;ValueChanged&lt;/code&gt; 事件获取值改变事件&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;BaseWPFControl:NumericBox&lt;/span&gt; &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding DecimalNumber}&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;TextFormat=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0.#&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;MinValue =&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;MaxValue =&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;100&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Interval =&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;ValueChanged=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;NumericBox_ValueChanged&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;BaseWPFControl:NumericBox&lt;/span&gt; &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding DecimalNumber}&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;TextFormat=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0.#&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;IsEnabled=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;False&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="1498px" data-flex-grow="624" height="53" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/NumericBox-1748076976389-72.png" width="331"&gt;&lt;/p&gt;&#10;&lt;h3 id="passwordbox"&gt;&lt;a href="#passwordbox" class="header-anchor"&gt;&lt;/a&gt;PasswordBox&#10;&lt;/h3&gt;&lt;p&gt;重写 &lt;code&gt;PasswordBox&lt;/code&gt; 样式，主要实现以下功能：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;PasswordBoxProperty.CanShowPassword&lt;/code&gt; 属性设置是否显示密码的功能&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;PasswordBox&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;200&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Password=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;123456&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;PasswordBox&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;200&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Password=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;123456&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;BaseWPFControl:PasswordBoxProperty.CanShowPassword=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;False&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="1946px" data-flex-grow="810" height="55" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PasswordBox-1748076976389-73.png" width="446"&gt;&lt;/p&gt;&#10;&lt;h3 id="datepicker--datetimepicker"&gt;&lt;a href="#datepicker--datetimepicker" class="header-anchor"&gt;&lt;/a&gt;DatePicker &amp;amp; DateTimePicker&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;DatePicker&lt;/code&gt; 和 &lt;code&gt;DateTimePicker&lt;/code&gt; 都是自定义控件，主要实现以下功能：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;选择时间和日期，这两个控件的区别在于一个前者只有日期，后者包含时间&lt;/li&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;SelectedDateTime&lt;/code&gt; 获取选中的日期时间&lt;/li&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;SelectedDateTimeFormat&lt;/code&gt; 设置日期时间的格式&lt;/li&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;SelectedDateTimeChanged&lt;/code&gt; 获取时间改变的事件&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;BaseWPFControl:DatePicker&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;BaseWPFControl:DateTimePicker&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="402px" data-flex-grow="167" height="317" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/DateTimePicker-1748076976389-74.png" width="532"&gt;&lt;/p&gt;&#10;&lt;h3 id="selectfileblock--selectfolderblock"&gt;&lt;a href="#selectfileblock--selectfolderblock" class="header-anchor"&gt;&lt;/a&gt;SelectFileBlock &amp;amp; SelectFolderBlock&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;SelectFileBlock&lt;/code&gt; 和 &lt;code&gt;SelectFolderBlock&lt;/code&gt; 都是自定义控件，主要实现以下功能：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;点击按钮通过对话框选择文件或者文件夹&lt;/li&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;SelectedPath&lt;/code&gt; 属性获取/设置路径&lt;/li&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;SelectedPathChanged&lt;/code&gt; 获取选中路径改变的事件&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;SelectFileBlock&lt;/code&gt; 可以通过 &lt;code&gt;ExtensionFilter&lt;/code&gt; 属性设置文件过滤&lt;/li&gt;&#10;&lt;li&gt;鼠标移动到文字上方出现 &lt;code&gt;ToolTip&lt;/code&gt; 显示路径的全文&lt;/li&gt;&#10;&lt;li&gt;鼠标双击文字直接跳转到路径所在的文件夹&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="2368px" data-flex-grow="987" height="54" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/SelectFileBlock-1748076976389-76.png" width="533"&gt;&lt;/p&gt;&#10;&lt;h3 id="image"&gt;&lt;a href="#image" class="header-anchor"&gt;&lt;/a&gt;Image&#10;&lt;/h3&gt;&lt;p&gt;提供一些内置的 &lt;code&gt;SVG&lt;/code&gt;，可以直接通过 &lt;code&gt;Source&lt;/code&gt; 绑定 &lt;code&gt;StaticResource&lt;/code&gt; 值进行设置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Image&lt;/span&gt; &lt;span class="na"&gt;Source=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{StaticResource DirectoryConfig}&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;50&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="394px" data-flex-grow="164" height="429" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/SVGImage-1748076976389-77.png" width="706"&gt;&lt;/p&gt;&#10;&lt;h3 id="progressbar--loading"&gt;&lt;a href="#progressbar--loading" class="header-anchor"&gt;&lt;/a&gt;ProgressBar &amp;amp; Loading&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;重写 &lt;code&gt;ProgressBar&lt;/code&gt; 样式，提供圆角&lt;/li&gt;&#10;&lt;li&gt;可以通过 &lt;code&gt;ProgressBarProperty.ShowValue&lt;/code&gt; 属性设置进度条显示当前值&lt;/li&gt;&#10;&lt;li&gt;提供扩展函数 &lt;code&gt;SetAnimateValue&lt;/code&gt; 设置进度条的值，通过该函数设置可以显示动画&lt;/li&gt;&#10;&lt;li&gt;提供自定义控件圆形进度条 &lt;code&gt;Loading&lt;/code&gt;，仅用于等待功能&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ProgressBar&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;40&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;400&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;d:Value=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;20&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ProgressBar&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;40&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;400&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsIndeterminate=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;True&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;BaseWPFControl:Loading&lt;/span&gt; &lt;span class="na"&gt;Diameter=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;150&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;StrokeThickness=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;30&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;Content=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;加载中，请等待...&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="217px" data-flex-grow="90" height="502" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/ProgressBar-1748076976389-78.png" width="454"&gt;&lt;/p&gt;&#10;&lt;h3 id="clock--calendar"&gt;&lt;a href="#clock--calendar" class="header-anchor"&gt;&lt;/a&gt;Clock &amp;amp; Calendar&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;重写 &lt;code&gt;Calender&lt;/code&gt; 样式&lt;/li&gt;&#10;&lt;li&gt;提供 自定义控件 &lt;code&gt;Clock&lt;/code&gt;，用于选择时间&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Calendar&lt;/span&gt; &lt;span class="na"&gt;x:Name =&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Calendar&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;BaseWPFControl:Clock&lt;/span&gt; &lt;span class="na"&gt;Height=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding ActualHeight, ElementName=Calender}&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="352px" data-flex-grow="146" height="354" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/Calender-1748076976389-79.png" width="520"&gt;&lt;/p&gt;&#10;&lt;h3 id="tabcontrol"&gt;&lt;a href="#tabcontrol" class="header-anchor"&gt;&lt;/a&gt;TabControl&#10;&lt;/h3&gt;&lt;p&gt;重写 &lt;code&gt;TabControl&lt;/code&gt; 的样式&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;TabControl&lt;/span&gt; &lt;span class="na"&gt;TabStripPlacement=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Left&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;TabItem&lt;/span&gt; &lt;span class="na"&gt;Header=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;水调歌头&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;TextBlock&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding Poetry1}&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;FontSize=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;14&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/TabItem&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;TabItem&lt;/span&gt; &lt;span class="na"&gt;Header=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;如梦令&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;TextBlock&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding Poetry2}&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;FontSize=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;14&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/TabItem&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;TabItem&lt;/span&gt; &lt;span class="na"&gt;Header=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;破阵子&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;TextBlock&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{Binding Poetry3}&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;FontSize=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;14&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/TabItem&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;TabItem&lt;/span&gt; &lt;span class="na"&gt;Header=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;未启用&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;IsEnabled=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;False&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/TabControl&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="1115px" data-flex-grow="464" height="227" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/TabControl-1748076976389-80.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/TabControl-1748076976389-80_hu_dcf9d584c5c7a29b.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/TabControl-1748076976389-80.png 1055w" width="1055"&gt;&lt;/p&gt;&#10;&lt;h2 id="复杂控件"&gt;&lt;a href="#%e5%a4%8d%e6%9d%82%e6%8e%a7%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;复杂控件&#10;&lt;/h2&gt;&lt;h3 id="configcontrol"&gt;&lt;a href="#configcontrol" class="header-anchor"&gt;&lt;/a&gt;ConfigControl&#10;&lt;/h3&gt;&lt;p&gt;提供自定义控件 &lt;code&gt;ConfigControl&lt;/code&gt;，用于方便的实现配置界面&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;BaseWPFControl:ConfigControl&lt;/span&gt; &lt;span class="na"&gt;ConfigName=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;日期时间&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;BaseWPFControl:DateTimePicker&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/BaseWPFControl:ConfigControl&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;BaseWPFControl:ConfigControl&lt;/span&gt; &lt;span class="na"&gt;ConfigName=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;选择文件&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;BaseWPFControl:SelectFileBlock&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;280&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/BaseWPFControl:ConfigControl&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="209px" data-flex-grow="87" height="543" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/ConfigControl-1748076976389-81.png" width="473"&gt;&lt;/p&gt;&#10;&lt;h3 id="lisbox"&gt;&lt;a href="#lisbox" class="header-anchor"&gt;&lt;/a&gt;LisBox&#10;&lt;/h3&gt;&lt;p&gt;重写 &lt;code&gt;ListBox&lt;/code&gt; 的样式，可以绑定 &lt;code&gt;Enum/List/Dictionary&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="329px" data-flex-grow="137" height="292" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/ListBox-1748076976389-82.png" width="401"&gt;&lt;/p&gt;&#10;&lt;h3 id="listview"&gt;&lt;a href="#listview" class="header-anchor"&gt;&lt;/a&gt;ListView&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;重写 &lt;code&gt;ListView&lt;/code&gt; 的样式&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="290px" data-flex-grow="120" height="335" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/ListView-1748076976389-83.png" width="405"&gt;&lt;/p&gt;&#10;&lt;h3 id="datagrid"&gt;&lt;a href="#datagrid" class="header-anchor"&gt;&lt;/a&gt;DataGrid&#10;&lt;/h3&gt;&lt;p&gt;重写 &lt;code&gt;DataGrid&lt;/code&gt; 的样式，这里包含两种样式，一种是选择单元格，另一种是鼠标经过选中整行&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="选中单元格" class="gallery-image" data-flex-basis="386px" data-flex-grow="160" height="289" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/DataGrid-1748076976389-84.png" width="465"&gt;&#10;&lt;img alt="无法选中，鼠标经过选中整行" class="gallery-image" data-flex-basis="386px" data-flex-grow="160" height="289" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/ListViewDataGrid-1748076976389-85.png" width="465"&gt;&lt;/p&gt;&#10;&lt;h2 id="更新记录"&gt;&lt;a href="#%e6%9b%b4%e6%96%b0%e8%ae%b0%e5%bd%95" class="header-anchor"&gt;&lt;/a&gt;更新记录&#10;&lt;/h2&gt;&lt;p&gt;更新了部分 &lt;code&gt;BaseWPFControl&lt;/code&gt; 中的控件，实现了更多的功能。&lt;/p&gt;&#10;&lt;h3 id="优化listbox"&gt;&lt;a href="#%e4%bc%98%e5%8c%96listbox" class="header-anchor"&gt;&lt;/a&gt;优化&lt;code&gt;ListBox&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;实际使用了一下&lt;code&gt;ListBox&lt;/code&gt;之后发现还是有很多问题，尤其是关于调整属性之后，并且给出了更多的示例&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="317px" data-flex-grow="132" height="905" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-17_10-07-54-1748075157664-1-1748076976389-86.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-17_10-07-54-1748075157664-1-1748076976389-86_hu_60ab160927034459.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-17_10-07-54-1748075157664-1-1748076976389-86.png 1196w" width="1196"&gt;&lt;/p&gt;&#10;&lt;h3 id="新增baseclipborder"&gt;&lt;a href="#%e6%96%b0%e5%a2%9ebaseclipborder" class="header-anchor"&gt;&lt;/a&gt;新增&lt;code&gt;BaseClipBorder&lt;/code&gt;&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;实现了新的控件&lt;code&gt;BaseClipBorder&lt;/code&gt;来解决边框溢出和边框圆角缝隙的问题&lt;/li&gt;&#10;&lt;li&gt;最终实现如右图所示&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="1266px" data-flex-grow="527" height="421" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-26_20-07-25-1748075157664-4-1748076976389-87.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-26_20-07-25-1748075157664-4-1748076976389-87_hu_c9033e7295d739fc.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-26_20-07-25-1748075157664-4-1748076976389-87_hu_808583ec8ffcac18.png 1600w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-26_20-07-25-1748075157664-4-1748076976389-87.png 2222w" width="2222"&gt;&lt;/p&gt;&#10;&lt;h3 id="优化progressbar"&gt;&lt;a href="#%e4%bc%98%e5%8c%96progressbar" class="header-anchor"&gt;&lt;/a&gt;优化ProgressBar&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;在上面&lt;code&gt;BaseClipBorder&lt;/code&gt;的基础上优化了&lt;code&gt;ProgressBar&lt;/code&gt;的实现&lt;/li&gt;&#10;&lt;li&gt;给出了垂直&lt;code&gt;ProgressBar&lt;/code&gt;例程实现&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="317px" data-flex-grow="132" height="905" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-26_20-10-51-1748075157664-3-1748076976389-88.gif" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-26_20-10-51-1748075157664-3-1748076976389-88_hu_eac4142a7423cdc3.gif 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-26_20-10-51-1748075157664-3-1748076976389-88.gif 1196w" width="1196"&gt;&lt;/p&gt;&#10;&lt;h3 id="新增defaultcontrolstyle和defaultwindowstyle"&gt;&lt;a href="#%e6%96%b0%e5%a2%9edefaultcontrolstyle%e5%92%8cdefaultwindowstyle" class="header-anchor"&gt;&lt;/a&gt;新增&lt;code&gt;DefaultControlStyle&lt;/code&gt;和&lt;code&gt;DefaultWindowStyle&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;这样设计的原因其实是为了移除掉&lt;code&gt;TextBlock&lt;/code&gt;的&lt;code&gt;FontSize&lt;/code&gt;属性和&lt;code&gt;FontFamily&lt;/code&gt;属性，改为直接从&lt;code&gt;Window&lt;/code&gt;或者&lt;code&gt;UserControl&lt;/code&gt;中继承字体属性。&lt;/p&gt;&#10;&lt;p&gt;而&lt;code&gt;DefaultControlStyle&lt;/code&gt;中定义了基础的&lt;code&gt;FontSize&lt;/code&gt;和&lt;code&gt;FontFamily&lt;/code&gt;样式，并且任何控件都可以使用。&lt;/p&gt;&#10;&lt;h3 id="优化button"&gt;&lt;a href="#%e4%bc%98%e5%8c%96button" class="header-anchor"&gt;&lt;/a&gt;优化&lt;code&gt;Button&lt;/code&gt;&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;删除了关于&lt;code&gt;ButtonShape&lt;/code&gt;属性的内容&lt;/li&gt;&#10;&lt;li&gt;新增了一些无边框按钮的样式&lt;/li&gt;&#10;&lt;li&gt;统一了&lt;code&gt;BorderBrush&lt;/code&gt;和&lt;code&gt;BorderThickness&lt;/code&gt;的风格&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="317px" data-flex-grow="132" height="905" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-26_20-04-46-1748075157664-2-1748076976389-89.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-26_20-04-46-1748075157664-2-1748076976389-89_hu_c38a3b61137a8814.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-26_20-04-46-1748075157664-2-1748076976389-89.png 1196w" width="1196"&gt;&lt;/p&gt;&#10;&lt;h3 id="优化combobox"&gt;&lt;a href="#%e4%bc%98%e5%8c%96combobox" class="header-anchor"&gt;&lt;/a&gt;优化&lt;code&gt;ComboBox&lt;/code&gt;&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;重写了&lt;code&gt;ComboBox&lt;/code&gt;的样式&lt;/li&gt;&#10;&lt;li&gt;新增&lt;code&gt;ComboBoxItem&lt;/code&gt;的样式&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="157px" data-flex-grow="65" height="379" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-26_20-15-22-1748075157664-5-1748076976389-90.png" width="249"&gt;&#10;&lt;img class="gallery-image" data-flex-basis="157px" data-flex-grow="65" height="379" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-26_20-15-01-1748075157664-6-1748076976390-99.png" width="249"&gt;&lt;/p&gt;&#10;&lt;h3 id="新增innerseparator属性"&gt;&lt;a href="#%e6%96%b0%e5%a2%9einnerseparator%e5%b1%9e%e6%80%a7" class="header-anchor"&gt;&lt;/a&gt;新增&lt;code&gt;InnerSeparator&lt;/code&gt;属性&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;新增&lt;code&gt;BaseWPFControl:ControlProperty.InnerSeparator&lt;/code&gt;属性，一般用于内部存在间隙属性调整&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-Markdown" data-lang="Markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;Button Content=&amp;#34;图标&amp;#34; Margin=&amp;#34;10&amp;#34; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; BaseWPFControl:ButtonProperty.Icon=&amp;#34;{StaticResource HomePage}&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; BaseWPFControl:ControlProperty.InnerSeparator=&amp;#34;20&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="1347px" data-flex-grow="561" height="99" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-26_20-34-49-1748075157665-7-1748076976390-92.png" width="556"&gt;&lt;/p&gt;&#10;&lt;h3 id="优化datagrid"&gt;&lt;a href="#%e4%bc%98%e5%8c%96datagrid" class="header-anchor"&gt;&lt;/a&gt;优化&lt;code&gt;DataGrid&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;在使用&lt;code&gt;DataGrid&lt;/code&gt;的时候，我发现有些属性没有效果，或者不尽如人意。&lt;/p&gt;&#10;&lt;p&gt;所以我就重新整理了一下&lt;code&gt;DataGrid&lt;/code&gt;的实现，并且给出了详细的案例。&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="317px" data-flex-grow="132" height="905" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_09-40-06-1748075157665-8-1748076976390-98.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_09-40-06-1748075157665-8-1748076976390-98_hu_d5706db02a1d7126.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_09-40-06-1748075157665-8-1748076976390-98.png 1196w" width="1196"&gt;&#10;&lt;img class="gallery-image" data-flex-basis="317px" data-flex-grow="132" height="905" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_09-41-09-1748075157665-10-1748076976389-91.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_09-41-09-1748075157665-10-1748076976389-91_hu_9fe38363d7309f86.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_09-41-09-1748075157665-10-1748076976389-91.png 1196w" width="1196"&gt;&#10;&lt;img class="gallery-image" data-flex-basis="317px" data-flex-grow="132" height="905" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_09-41-14-1748075157665-9-1748076976390-93.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_09-41-14-1748075157665-9-1748076976390-93_hu_a8854a46a59afc0e.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_09-41-14-1748075157665-9-1748076976390-93.png 1196w" width="1196"&gt;&lt;/p&gt;&#10;&lt;h3 id="优化calendar和clock"&gt;&lt;a href="#%e4%bc%98%e5%8c%96calendar%e5%92%8cclock" class="header-anchor"&gt;&lt;/a&gt;优化&lt;code&gt;Calendar&lt;/code&gt;和&lt;code&gt;Clock&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="317px" data-flex-grow="132" height="905" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_13-59-15-1748075157665-11-1748076976390-94.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_13-59-15-1748075157665-11-1748076976390-94_hu_81947d20400248a9.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_13-59-15-1748075157665-11-1748076976390-94.png 1196w" width="1196"&gt;&lt;/p&gt;&#10;&lt;h3 id="优化flipbox"&gt;&lt;a href="#%e4%bc%98%e5%8c%96flipbox" class="header-anchor"&gt;&lt;/a&gt;优化&lt;code&gt;FlipBox&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="317px" data-flex-grow="132" height="905" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_13-59-39-1748075157665-12-1748076976390-95.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_13-59-39-1748075157665-12-1748076976390-95_hu_745365085763fd52.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_13-59-39-1748075157665-12-1748076976390-95.png 1196w" width="1196"&gt;&lt;/p&gt;&#10;&lt;h3 id="新增dialog显示成window"&gt;&lt;a href="#%e6%96%b0%e5%a2%9edialog%e6%98%be%e7%a4%ba%e6%88%90window" class="header-anchor"&gt;&lt;/a&gt;新增&lt;code&gt;Dialog&lt;/code&gt;显示成&lt;code&gt;Window&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;可以调用&lt;code&gt;ShowDialogAsWindow&lt;/code&gt;函数，将&lt;code&gt;Dialog&lt;/code&gt;显示成独立的&lt;code&gt;Window&lt;/code&gt;，就算没有&lt;code&gt;DialogContainer&lt;/code&gt;也能显示。使用体验和&lt;code&gt;WPF&lt;/code&gt;原生的&lt;code&gt;ShowDialog&lt;/code&gt;函数类似。&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="317px" data-flex-grow="132" height="905" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_14-07-45-1748075157665-13-1748076976390-96.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_14-07-45-1748075157665-13-1748076976390-96_hu_2435c3031ea4fe52.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_14-07-45-1748075157665-13-1748076976390-96.png 1196w" width="1196"&gt;&#10;&lt;img class="gallery-image" data-flex-basis="317px" data-flex-grow="132" height="905" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_14-07-37-1748075157665-14-1748076976390-97.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_14-07-37-1748075157665-14-1748076976390-97_hu_a2ccb232533ff771.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_14-07-37-1748075157665-14-1748076976390-97.png 1196w" width="1196"&gt;&lt;/p&gt;&#10;&lt;h3 id="优化listbox-1"&gt;&lt;a href="#%e4%bc%98%e5%8c%96listbox-1" class="header-anchor"&gt;&lt;/a&gt;优化&lt;code&gt;ListBox&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;和之前的显示一致，只是使用&lt;code&gt;BaseClipBorder&lt;/code&gt;简化了内部实现。&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="317px" data-flex-grow="132" height="905" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_14-21-24-1748075157665-15-1748076976390-101.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_14-21-24-1748075157665-15-1748076976390-101_hu_84881f83ae5ec86.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_14-21-24-1748075157665-15-1748076976390-101.png 1196w" width="1196"&gt;&lt;/p&gt;&#10;&lt;h3 id="优化listview"&gt;&lt;a href="#%e4%bc%98%e5%8c%96listview" class="header-anchor"&gt;&lt;/a&gt;优化&lt;code&gt;ListView&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="317px" data-flex-grow="132" height="905" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_16-19-43-1748075157665-16-1748076976390-102.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_16-19-43-1748075157665-16-1748076976390-102_hu_843f42e192f84fc6.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_16-19-43-1748075157665-16-1748076976390-102.png 1196w" width="1196"&gt;&lt;/p&gt;&#10;&lt;h3 id="优化smoothprogress"&gt;&lt;a href="#%e4%bc%98%e5%8c%96smoothprogress" class="header-anchor"&gt;&lt;/a&gt;优化&lt;code&gt;SmoothProgress&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;这里省事，直接让&lt;code&gt;SmoothProgressBar&lt;/code&gt;使用&lt;code&gt;ProgressBar&lt;/code&gt;的样式&lt;/p&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="317px" data-flex-grow="132" height="905" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_17-44-38-1748075157665-18-1748076976390-100.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_17-44-38-1748075157665-18-1748076976390-100_hu_6b43b067cbea1b83.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-03-28_17-44-38-1748075157665-18-1748076976390-100.png 1196w" width="1196"&gt;&lt;/p&gt;&#10;&lt;h3 id="新增simplescrollviewer样式"&gt;&lt;a href="#%e6%96%b0%e5%a2%9esimplescrollviewer%e6%a0%b7%e5%bc%8f" class="header-anchor"&gt;&lt;/a&gt;新增&lt;code&gt;SimpleScrollViewer&lt;/code&gt;样式&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;该样式没有滚动条，只有箭头按钮，并且增加了滚动动画&lt;/li&gt;&#10;&lt;li&gt;主要用于&lt;code&gt;TabControl&lt;/code&gt;的&lt;code&gt;Header&lt;/code&gt;部分&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="411px" data-flex-grow="171" height="808" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-04-02_11-18-51-1748075157665-17-1748076976392-103.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-04-02_11-18-51-1748075157665-17-1748076976392-103_hu_2965340e0ee62fdf.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-04-02_11-18-51-1748075157665-17-1748076976392-103.png 1386w" width="1386"&gt;&lt;/p&gt;&#10;&lt;h3 id="优化tabcontrol"&gt;&lt;a href="#%e4%bc%98%e5%8c%96tabcontrol" class="header-anchor"&gt;&lt;/a&gt;优化&lt;code&gt;TabControl&lt;/code&gt;&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;优化了微软原生样式下，&lt;code&gt;TabItem&lt;/code&gt;溢出的问题&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="411px" data-flex-grow="171" height="808" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-04-02_11-19-13-1748075157665-19-1748076976392-104.png" srcset="https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-04-02_11-19-13-1748075157665-19-1748076976392-104_hu_a6a55185d73529ef.png 800w, https://zeroszhang.github.io/p/basewpfcontrol/assets/PixPin_2025-04-02_11-19-13-1748075157665-19-1748076976392-104.png 1386w" width="1386"&gt;&lt;/p&gt;&#10;</description></item></channel></rss>