Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
ea1fa9e
feat: Delete WindowBasicExample
yanjinhuagood Jul 18, 2026
db4f59f
Update MagnifierDesktop.cs
yanjinhuagood Jul 20, 2026
a6ed166
Update Magnifier.cs
yanjinhuagood Jul 20, 2026
828cb8c
Fix issue: Gauge support background foreground offsetX offsetY (#267) 💯
yanjinhuagood Jul 21, 2026
9b906c1
Fix issue: Gauge support TitleSpacing TickFontSize ValueFontSize Titl…
yanjinhuagood Jul 22, 2026
6c31b8a
Update CropAvatar.cs
yanjinhuagood Jul 23, 2026
6b421d0
feat: CropImage add IDisposable
yanjinhuagood Jul 23, 2026
38fa9d2
feat: modify resources publish ext
yanjinhuagood Jul 24, 2026
46b991a
feat: modify ThemeExample switch Theme
yanjinhuagood Jul 25, 2026
93206df
feat: modify ScreenCut Dispose
yanjinhuagood Jul 27, 2026
689ef81
feat: modify Circlenu can be dragged to the edge when retracted
yanjinhuagood Jul 28, 2026
8879436
feat: thememanger add SwitchTheme
yanjinhuagood Jul 29, 2026
510251e
Create build-dll.yml
yanjinhuagood Aug 2, 2026
7821763
Merge pull request #268 from WPFDevelopersOrg/master-workflows
yanjinhuagood Aug 2, 2026
ef4c21e
Merge pull request #269 from WPFDevelopersOrg/master
yanjinhuagood Aug 2, 2026
6fb5f9a
Merge pull request #270 from WPFDevelopersOrg/master-workflows
yanjinhuagood Aug 2, 2026
0054c9a
Delete build-dll.yml
yanjinhuagood Aug 2, 2026
5b03023
ci: net40 workflows and enable net40 build on hosted runner
yanjinhuagood Aug 2, 2026
9c3c2a8
feat: add add MarkdownViewer control and sample
yanjinhuagood Aug 2, 2026
60c179f
feat: add MarkdownViewer control and sample
yanjinhuagood Aug 2, 2026
637301a
feat: add MarkdownViewer control and sample
yanjinhuagood Aug 2, 2026
94add6c
feat: add MarkdownViewer control and sample
yanjinhuagood Aug 2, 2026
4a88404
Update WPFDevelopersExt.exe.gz
yanjinhuagood Aug 2, 2026
4f5ca88
docs: add MarkdownViewer sample
yanjinhuagood Aug 2, 2026
995b93f
Merge pull request #271 from WPFDevelopersOrg/dev
yanjinhuagood Aug 2, 2026
cee11f2
Fix Issue: MultiSelectComboBox selection state synchronization issue
yanjinhuagood Aug 3, 2026
c74250f
Remove assembly signing from library projects
yanjinhuagood Aug 3, 2026
c963972
Merge pull request #272 from WPFDevelopersOrg/dev
yanjinhuagood Aug 3, 2026
f6c8c34
feat: modify segmented padding
yanjinhuagood Aug 4, 2026
0e9fa89
fix: include localization resource DLLs in workflow artifacts
yanjinhuagood Aug 4, 2026
d7b800b
Merge pull request #273 from WPFDevelopersOrg/dev
yanjinhuagood Aug 4, 2026
fec2fa7
fix: include localization resource DLLs in workflow artifacts
yanjinhuagood Aug 5, 2026
84d2510
chore: version to 0.2.0
yanjinhuagood Aug 5, 2026
fd61c6f
Merge branch 'release/0.2.0' into dev
yanjinhuagood Aug 5, 2026
8d13826
Merge pull request #274 from WPFDevelopersOrg/dev
yanjinhuagood Aug 5, 2026
a2b5483
Merge pull request #275 from WPFDevelopersOrg/release/0.2.0
yanjinhuagood Aug 5, 2026
c0450a9
chore: modify wd version 0.2.0
yanjinhuagood Aug 5, 2026
52f64d0
Merge pull request #276 from WPFDevelopersOrg/release/0.2.0
yanjinhuagood Aug 5, 2026
d4b5d5f
Update README.md
yanjinhuagood Sep 2, 2026
e979917
Merge pull request #278 from WPFDevelopersOrg/yanjinhuagood-patch-1
yanjinhuagood Sep 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/build-net40.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,8 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: wpfdevelopers-net40
path: OutPut/**/WPFDevelopers.dll
path: |
OutPut/**/WPFDevelopers.dll
OutPut/**/en-US/WPFDevelopers.resources.dll
OutPut/**/ko-KR/WPFDevelopers.resources.dll
if-no-files-found: error
26 changes: 25 additions & 1 deletion .github/workflows/build-net45x.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,33 @@ jobs:
}
}

- name: Rename windows folders to windows7
shell: pwsh
run: |
if (-not (Test-Path OutPut)) {
exit 0
}

Get-ChildItem OutPut -Directory |
Where-Object { $_.Name -match '^net\d+\.\d+-windows$' } |
ForEach-Object {
$source = $_.FullName
$alias = Join-Path $_.Parent.FullName ($_.Name + '7')

if (Test-Path $alias) {
Remove-Item $alias -Recurse -Force
}

Move-Item $source $alias
Write-Host "Renamed folder: $source -> $alias"
}

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: wpfdevelopers-net45x
path: OutPut/**/WPFDevelopers.dll
path: |
OutPut/**/WPFDevelopers.dll
OutPut/**/en-US/WPFDevelopers.resources.dll
OutPut/**/ko-KR/WPFDevelopers.resources.dll
if-no-files-found: error
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,16 @@ xmlns:wd="https://github.com/WPFDevelopersOrg/WPFDevelopers"

`xmlns:wd="https://github.com/WPFDevelopersOrg/WPFDevelopers"`

----------
### MarkdownViewer

<img src="https://github.com/WPFDevelopersOrg/ResourcesCache/raw/main/resources/WPFDevelopersResource/MarkdownViewer.gif"/>

----------
### SwitchTheme

<img src="https://github.com/WPFDevelopersOrg/ResourcesCache/raw/main/resources/WPFDevelopersResource/SwitchTheme.gif"/>

----------
### CircleMenu

Expand Down
18 changes: 18 additions & 0 deletions docs/en/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,24 @@ Then use WD controls:
</Window>
```

### MarkdownViewer Example

`wd:MarkdownViewer` is used to render Markdown content (headings, lists, quotes, code blocks, tables, links, and images).

```xml
<Grid>
<wd:MarkdownViewer
Margin="12"
Padding="12"
Markdown="## Hello Markdown&#10;&#10;This is **WPFDevelopers** MarkdownViewer." />
</Grid>
```

You can find the complete sample here:

- `src/WPFDevelopers.Samples.Shared/ExampleViews/MarkdownViewerExample.xaml`
- `src/WPFDevelopers.Samples.Shared/ExampleViews/MarkdownViewerExample.xaml.cs`

---

## Three Usage Patterns
Expand Down
18 changes: 18 additions & 0 deletions docs/zh/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,24 @@ xmlns:wd="https://github.com/WPFDevelopersOrg/WPFDevelopers"
</Window>
```

### MarkdownViewer 示例

`wd:MarkdownViewer` 用于渲染 Markdown 内容(标题、列表、引用、代码块、表格、链接、图片等)。

```xml
<Grid>
<wd:MarkdownViewer
Margin="12"
Padding="12"
Markdown="## Hello Markdown&#10;&#10;This is **WPFDevelopers** MarkdownViewer." />
</Grid>
```

完整示例可参考:

- `src/WPFDevelopers.Samples.Shared/ExampleViews/MarkdownViewerExample.xaml`
- `src/WPFDevelopers.Samples.Shared/ExampleViews/MarkdownViewerExample.xaml.cs`

---

## 三种使用方式
Expand Down
8 changes: 4 additions & 4 deletions src/Package.props
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<Copyright>Copyright © WPFDevelopersOrg 2026</Copyright>
<AssemblyVersion>0.1.0.0</AssemblyVersion>
<FileVersion>0.1.0.0</FileVersion>
<Version>0.1.0.0</Version>
<AssemblyVersion>0.2.0.0</AssemblyVersion>
<FileVersion>0.2.0.0</FileVersion>
<Version>0.2.0.0</Version>
<RepositoryUrl>https://github.com/WPFDevelopersOrg/WPFDevelopers</RepositoryUrl>
<Configurations>Debug;Release;Debug-.NET40;Release-.NET40</Configurations>
</PropertyGroup>
</Project>
</Project>
3 changes: 1 addition & 2 deletions src/WPFDevelopers.Net40/WPFDevelopers.Net40.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
<PropertyGroup>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<TargetFramework>net40</TargetFramework>
<SignAssembly>True</SignAssembly>
</PropertyGroup>
<Import Project="..\WPFDevelopers.Shared\WPFDevelopers.Shared.projitems" Label="Shared" />
<Import Project="..\Microsoft.Windows.Shell\Microsoft.Windows.Shell.projitems" Label="Shared" />
Expand All @@ -23,4 +22,4 @@
<Resource Include="Effects\GrayscaleEffect.ps" />
<Resource Include="Resources\Audio\shake.wav" />
</ItemGroup>
</Project>
</Project>
3 changes: 1 addition & 2 deletions src/WPFDevelopers.Net45x/WPFDevelopers.Net45x.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
<Import Project="../Package.props" />
<PropertyGroup>
<UseWindowsForms>true</UseWindowsForms>
<SignAssembly>True</SignAssembly>
</PropertyGroup>
<Import Project="..\WPFDevelopers.Shared\WPFDevelopers.Shared.projitems" Label="Shared" />
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
Expand All @@ -17,4 +16,4 @@
<Resource Include="Effects\GrayscaleEffect.ps" />
<Resource Include="Resources\Audio\shake.wav" />
</ItemGroup>
</Project>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,32 @@
FontSize="20"
Text="Light | Dark" />
<WrapPanel Margin="10">
<TextBlock Text="Light" />
<ToggleButton
x:Name="tbLightDark"
Margin="10,0"
Checked="LightDark_Checked"
Unchecked="LightDark_Checked" />
<TextBlock Text="Dark" />
<wd:Segmented
x:Name="PART_Segmented"
Width="100"
wd:ElementHelper.CornerRadius="14"
ItemClick="Segmented_ItemClick">
<wd:SegmentedItem x:Name="SegmentedLight">
<wd:PathIcon
Width="18"
Height="18"
Data="M12 19a7 7 0 1 1 0-14 7 7 0 0 1 0 14Zm0-1.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 1 0 0 11Zm-5.657.157a.75.75 0 0 1 0 1.06l-1.768 1.768a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.767-1.768a.75.75 0 0 1 1.061 0ZM3.515 3.515a.75.75 0 0 1 1.06 0l1.768 1.768a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L3.515 4.575a.75.75 0 0 1 0-1.06ZM12 0a.75.75 0 0 1 .75.75v2.5a.75.75 0 0 1-1.5 0V.75A.75.75 0 0 1 12 0ZM4 12a.75.75 0 0 1-.75.75H.75a.75.75 0 0 1 0-1.5h2.5A.75.75 0 0 1 4 12Zm8 8a.75.75 0 0 1 .75.75v2.5a.75.75 0 0 1-1.5 0v-2.5A.75.75 0 0 1 12 20Zm12-8a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h2.5A.75.75 0 0 1 24 12Zm-6.343 5.657a.75.75 0 0 1 1.06 0l1.768 1.768a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-1.768-1.767a.75.75 0 0 1 0-1.061Zm2.828-14.142a.75.75 0 0 1 0 1.06l-1.768 1.768a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l1.767-1.768a.75.75 0 0 1 1.061 0Z"
Foreground="{DynamicResource WD.PrimaryTextBrush}" />
</wd:SegmentedItem>
<wd:SegmentedItem x:Name="SegmentedDark">
<Border
Width="18"
Height="18"
Background="{DynamicResource WD.BackgroundBrush}"
CornerRadius="10">
<wd:PathIcon
Width="16"
Height="16"
Data="M12 2a10 10 0 1 0 10 10A7 7 0 0 1 12 2Z"
Foreground="{DynamicResource WD.PrimaryTextBrush}" />
</Border>
</wd:SegmentedItem>
</wd:Segmented>
</WrapPanel>
<TextBlock
Margin="0,20,0,0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using System.Globalization;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Navigation;
using WPFDevelopers.Controls;
using WPFDevelopers.Helpers;
Expand All @@ -21,18 +20,9 @@ public ThemeExample()
private void ThemeExample_Loaded(object sender, RoutedEventArgs e)
{
App.Theme = ThemeManager.Instance.Resources.Theme;
tbLightDark.IsChecked = App.Theme == ThemeType.Dark;
PART_Segmented.SelectedIndex = ThemeManager.Instance.Resources.Theme == ThemeType.Light ? 0 : 1;
}

private void LightDark_Checked(object sender, RoutedEventArgs e)
{
if (!(sender is ToggleButton lightDark)) return;
var theme = lightDark.IsChecked.Value ? ThemeType.Dark : ThemeType.Light;
if (App.Theme == theme) return;
App.Theme = theme;
ThemeManager.Instance.SetTheme(theme);
}


private void ComboBoxLanguages_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!(sender is ComboBox cBox)) return;
Expand All @@ -59,5 +49,13 @@ private void QQHyperlink_RequestNavigate(object sender, RequestNavigateEventArgs
BrowserHelper.OpenUrl(uri);
e.Handled = true;
}

private void Segmented_ItemClick(object sender, RoutedEventArgs e)
{
var segmented = sender as Segmented;
var theme = segmented.SelectedIndex == 0 ? ThemeType.Light : ThemeType.Dark;
App.Theme = theme;
ThemeManager.Instance.SwitchTheme(PART_Segmented, theme);
}
}
}

This file was deleted.

This file was deleted.

28 changes: 28 additions & 0 deletions src/WPFDevelopers.Samples.Shared/ExampleViews/GaugeExample.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,34 @@
Maximum="90"
Minimum="30" />
</StackPanel>
<StackPanel VerticalAlignment="Bottom">
<wd:Gauge
Title="Offset"
Width="150"
Height="150"
Margin="10"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="#293950"
Foreground="LightGreen"
FontSize="10"
OffsetX="-30"
OffsetY="-20"
TickFontSize="10"
TitleFontSize="12"
TitleSpacing="6"
ValueFontSize="14"
Value="{Binding ElementName=MySlider4, Path=Value}" />
<Slider
Name="MySlider4"
Width="200"
Margin="0,0,0,20"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Maximum="100"
Minimum="0"
Value="50" />
</StackPanel>
</WrapPanel>
<controls:CodeViewer.SourceCodes>
<controls:SourceCodeModel CodeSource="/WPFDevelopers.SamplesCode;component/ExampleViews/GaugeExample.xaml" CodeType="Xaml" />
Expand Down
48 changes: 40 additions & 8 deletions src/WPFDevelopers.Samples.Shared/ExampleViews/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,61 @@
WindowStartupLocation="CenterScreen"
mc:Ignorable="d">
<wd:Window.TitleBarLayout>
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
<wd:SwitchButton x:Name="ThemeSwitchBtn">
<StackPanel
HorizontalAlignment="Right"
wd:PanelHelper.Spacing="2"
Orientation="Horizontal">
<wd:SwitchButton
x:Name="ThemeSwitchBtn"
Width="30"
Height="30"
Click="ThemeSwitchBtn_Click">
<wd:SwitchButton.UncheckedContent>
<Border
Width="18"
Height="18"
Background="White"
CornerRadius="10">
<wd:PathIcon
Width="16"
Height="16"
Data="M12 2a10 10 0 1 0 10 10A7 7 0 0 1 12 2Z"
Foreground="{DynamicResource WD.WindowBorderBrush}" />
</Border>
</wd:SwitchButton.UncheckedContent>
<wd:SwitchButton.CheckedContent>
<wd:PathIcon
Width="18"
Height="18"
Data="M12 19a7 7 0 1 1 0-14 7 7 0 0 1 0 14Zm0-1.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 1 0 0 11Zm-5.657.157a.75.75 0 0 1 0 1.06l-1.768 1.768a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.767-1.768a.75.75 0 0 1 1.061 0ZM3.515 3.515a.75.75 0 0 1 1.06 0l1.768 1.768a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L3.515 4.575a.75.75 0 0 1 0-1.06ZM12 0a.75.75 0 0 1 .75.75v2.5a.75.75 0 0 1-1.5 0V.75A.75.75 0 0 1 12 0ZM4 12a.75.75 0 0 1-.75.75H.75a.75.75 0 0 1 0-1.5h2.5A.75.75 0 0 1 4 12Zm8 8a.75.75 0 0 1 .75.75v2.5a.75.75 0 0 1-1.5 0v-2.5A.75.75 0 0 1 12 20Zm12-8a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h2.5A.75.75 0 0 1 24 12Zm-6.343 5.657a.75.75 0 0 1 1.06 0l1.768 1.768a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-1.768-1.767a.75.75 0 0 1 0-1.061Zm2.828-14.142a.75.75 0 0 1 0 1.06l-1.768 1.768a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l1.767-1.768a.75.75 0 0 1 1.061 0Z"
Foreground="White" />
</wd:SwitchButton.CheckedContent>
</wd:SwitchButton>
<wd:SwitchButton
x:Name="ColorSwitchBtn"
Width="30"
Height="30">
<wd:SwitchButton.UncheckedContent>
<wd:PathIcon
Width="20"
Height="20"
Width="18"
Height="18"
Data="M198,56.74A99.31,99.31,0,0,0,128,28h-1A100,100,0,0,0,28,128c0,41.22,25.55,75.85,66.69,90.38a28.34,28.34,0,0,0,9.42,1.63A28,28,0,0,0,132,192a20,20,0,0,1,20-20h46.21a27.84,27.84,0,0,0,27.3-21.76,100.37,100.37,0,0,0,2.49-23.1A99.26,99.26,0,0,0,198,56.74Zm19.74,91.72A19.89,19.89,0,0,1,198.21,164H152a28,28,0,0,0-28,28,20,20,0,0,1-26.64,18.83C59.51,197.46,36,165.72,36,128a92,92,0,0,1,91.05-92H128a92,92,0,0,1,89.72,112.46ZM136,76a8,8,0,1,1-8-8A8,8,0,0,1,136,76ZM92,100a8,8,0,1,1-8-8A8,8,0,0,1,92,100Zm0,56a8,8,0,1,1-8-8A8,8,0,0,1,92,156Zm88-56a8,8,0,1,1-8-8A8,8,0,0,1,180,100Z"
Foreground="White" />
</wd:SwitchButton.UncheckedContent>
<wd:SwitchButton.CheckedContent>
<wd:PathIcon
Width="20"
Height="20"
Width="18"
Height="18"
Data="M200.77,53.89A103.27,103.27,0,0,0,128,24h-1.07A104,104,0,0,0,24,128c0,43,26.58,79.06,69.36,94.17A32,32,0,0,0,136,192a16,16,0,0,1,16-16h46.21a31.81,31.81,0,0,0,31.2-24.88,104.43,104.43,0,0,0,2.59-24A103.28,103.28,0,0,0,200.77,53.89ZM84,168a12,12,0,1,1,12-12A12,12,0,0,1,84,168Zm0-56a12,12,0,1,1,12-12A12,12,0,0,1,84,112Zm44-24a12,12,0,1,1,12-12A12,12,0,0,1,128,88Zm44,24a12,12,0,1,1,12-12A12,12,0,0,1,172,112Z"
Foreground="White" />
</wd:SwitchButton.CheckedContent>
</wd:SwitchButton>
<Popup
AllowsTransparency="True"
HorizontalOffset="-200"
IsOpen="{Binding IsChecked, ElementName=ThemeSwitchBtn, Mode=TwoWay}"
IsOpen="{Binding IsChecked, ElementName=ColorSwitchBtn, Mode=TwoWay}"
Placement="Bottom"
PlacementTarget="{Binding ElementName=ThemeSwitchBtn}"
PlacementTarget="{Binding ElementName=ColorSwitchBtn}"
StaysOpen="False">
<Border
Margin="10"
Expand Down
Loading
Loading