# WPFDevelopers.Minimal
**Repository Path**: WPFDevelopersOrg/WPFDevelopers.Minimal
## Basic Information
- **Project Name**: WPFDevelopers.Minimal
- **Description**: 这是一款WPF客户端基础控件,欢迎使用
- **Primary Language**: C#
- **License**: MIT
- **Default Branch**: main
- **Homepage**: https://gitee.com/WPFDevelopersOrg
- **GVP Project**: No
## Statistics
- **Stars**: 91
- **Forks**: 27
- **Created**: 2022-01-22
- **Last Updated**: 2025-06-10
## Categories & Tags
**Categories**: desktop-ui
**Tags**: WPF, UI, XAML
## README

[English](https://github.com/WPFDevelopersOrg/WPFDevelopers.Minimal/blob/master/README.md)
## Welcome to WPFDevelopers.Minimal
 

### 停止更新,不建议使用,请跳转[自定义控件库](https://github.com/WPFDevelopersOrg/WPFDevelopers) https://github.com/WPFDevelopersOrg/WPFDevelopers
### [码云](https://gitee.com/WPFDevelopersOrg) https://gitee.com/WPFDevelopersOrg
### 加入QQ群:458041663
### 欢迎关注微信公众号
### 捐助
如果您觉得我们的开源软件对你有所帮助,请扫下方二维码打赏我们一杯咖啡。
| 支付宝 | 微信 |
|----|-----|
|
|
|
### 贡献者
### .Net Version
| .Net Version | Status |
| ---- | ---- |
| Net40 | ✅ |
| net45 | ✅ |
| net46 | ✅ |
| net47 | ✅ |
| net48 | ✅ |
| netcoreapp3.0 | ✅ |
| net5.0-windows | ✅ |
| net6.0-windows | ✅ |
# __最新请使用预览版Nuget包__
### 效果展示


### Nuget 版本大于等于 3.2.3 效果展示
[Blue](#Blue)
[Green](#Green)
[Red](#Red)
[Orange](#Orange)
[Purple](#Purple)
### 第一步: 添加 nuget;
```
Install-Package WPFDevelopers.Minimal
```
### 第二步: App.xaml中增加节点:
```xaml
注意:从旧版升级报错时把 xmlns:ws="https://github.com/WPFDevelopersOrg.WPFDevelopers.Minimal"
改成xmlns:ws="https://github.com/WPFDevelopersOrg/WPFDevelopers.Minimal"
```
` xmlns:ws="https://github.com/WPFDevelopersOrg/WPFDevelopers.Minimal" `
``` XAML
```
### 第三步:添加命名空间:
`xmlns:ws="https://github.com/WPFDevelopersOrg/WPFDevelopers.Minimal"`
### 使用方法
[数据源](#数据源)
[NotifyIcon](#NotifyIcon)
[Window](#Window)
[Loading](#Loading)
[MessageBox](#MessageBox)
[Menu|ContextMenu](#Menu|ContextMenu)
[Button](#Button)
[RadioButton](#RadioButton)
[Checkbox](#Checkbox)
[TextBox](#TextBox)
[PasswordBox](#PasswordBox)
[ComboBox](#ComboBox)
[ToggleButton](#ToggleButton)
[DatePicker](#DatePicker)
[Slider](#Slider)
[ProgressBar](#ProgressBar)
[DataGrid](#DataGrid)
[ListBox](#ListBox)
[ListView](#ListView)
[TreeView](#TreeView)
[Expander](#Expander)
[GroupBox](#GroupBox)
[TabControl](#TabControl)
[GridSplitter](#GridSplitter)
### 数据源
1)数据源
``` C#
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using WPFDevelopers.Minimal.Sample.Models;
namespace WPFDevelopers.Minimal.Sample.ExampleViews
{
public partial class MainView : WPFDevelopers.Minimal.Net40.Window
{
#region DataSource
public ObservableCollection UserCollection
{
get { return (ObservableCollection)GetValue(UserCollectionProperty); }
set { SetValue(UserCollectionProperty, value); }
}
public static readonly DependencyProperty UserCollectionProperty =
DependencyProperty.Register("UserCollection", typeof(ObservableCollection), typeof(MainView), new PropertyMetadata(null));
public bool AllSelected
{
get { return (bool)GetValue(AllSelectedProperty); }
set { SetValue(AllSelectedProperty, value); }
}
public static readonly DependencyProperty AllSelectedProperty =
DependencyProperty.Register("AllSelected", typeof(bool), typeof(MainView), new PropertyMetadata(AllSelectedChangedCallback));
private static void AllSelectedChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var view = d as MainView;
var isChecked = (bool)e.NewValue;
if ((bool)e.NewValue)
view.UserCollection.ToList().ForEach(y => y.IsChecked = isChecked);
else
view.UserCollection.ToList().ForEach(y => y.IsChecked = isChecked);
}
#endregion
public MainView()
{
InitializeComponent();
this.Loaded += MainView_Loaded;
}
private void MainView_Loaded(object sender, RoutedEventArgs e)
{
var time = DateTime.Now;
UserCollection = new ObservableCollection();
for (int i = 0; i < 4; i++)
{
UserCollection.Add(new UserModel
{
Date = time,
Name = "WPFDevelopers",
Address = "No. 189, Grove St, Los Angeles",
Children = new System.Collections.Generic.List()
{
new UserModel { Name= "WPFDevelopers.Minimal1.1" },
new UserModel { Name = "WPFDevelopers.Minimal1.2" },
new UserModel { Name = "WPFDevelopers.Minimal1.3" },
new UserModel { Name= "WPFDevelopers.Minimal1.4" },
new UserModel { Name = "WPFDevelopers.Minimal1.5" },
new UserModel { Name = "WPFDevelopers.Minimal1.6" },
}
});
time = time.AddDays(2);
}
}
}
}
```
### NotifyIcon
1)XAML
``` XML
```
2)CS code
``` C#
private void Quit_Click(object sender, RoutedEventArgs e)
{
Application.Current.Shutdown();
}
private void About_Click(object sender, RoutedEventArgs e)
{
new AboutWindow().Show();
}
private void SendMessage_Click(object sender, RoutedEventArgs e)
{
NotifyIcon.ShowBalloonTip("Message", " Welcome to WPFDevelopers.Minimal ",NotifyIconInfoType.None);
}
private void Twink_Click(object sender, RoutedEventArgs e)
{
WpfNotifyIcon.IsTwink = !WpfNotifyIcon.IsTwink;
menuItemTwink.IsChecked = WpfNotifyIcon.IsTwink;
}
```

### Window
1)XAML
``` XML
ws:Window x:Class="WpfApp.MainWindow"
```
2)去除.cs文件中的继承
``` C#
public partial class MainWindow
```

### Loading
1).cs
``` C#
var task = new Task(() =>
{
//Things to wait for
Thread.Sleep(5000);
});
task.ContinueWith((previousTask) =>
{
WPFDevelopers.Minimal.Controls.Loading.Close();
},TaskScheduler.FromCurrentSynchronizationContext());
WPFDevelopers.Minimal.Controls.Loading.Show();
task.Start();
```
2)Exit Task
``` C#
var tokenSource = new CancellationTokenSource();
var cancellationToken = tokenSource.Token;
var task = new Task(() =>
{
for (int i = 0; i < 5; i++)
{
//这里做自己的事情
if (tokenSource.IsCancellationRequested)return;
Thread.Sleep(1000);
}
}, cancellationToken);
task.ContinueWith(previousTask =>
{
if (tokenSource.IsCancellationRequested)return;
Loading.Close();
}, TaskScheduler.FromCurrentSynchronizationContext());
Loading.Show(true);
Loading.LoadingQuitEvent += delegate
{
tokenSource.Cancel();
};
task.Start();
```

### MessageBox
1).cs 使用如下
``` C#
WPFDevelopers.Minimal.Controls.MessageBox.Show("文件删除成功。", "消息",MessageBoxButton.OK,MessageBoxImage.Information);
WPFDevelopers.Minimal.Controls.MessageBox.Show("当前文件不存在!", "警告", MessageBoxImage.Warning);
WPFDevelopers.Minimal.Controls.MessageBox.Show("当前文件不存在。", "错误", MessageBoxImage.Error);
WPFDevelopers.Minimal.Controls.MessageBox.Show("当前文件不存在,是否继续?", "询问", MessageBoxButton.OKCancel, MessageBoxImage.Question);
```

###
1)XAML
``` XML
```

### Button
1)XAML
``` XML
```

### RadioButton
1)XAML
``` XML
```

### Checkbox
1)XAML
``` XML
```

### TextBox
1)XAML
``` XML
```

### PasswordBox
1)XAML
``` XML
```

### ComboBox
1)XAML
``` XML
Option 1
Option 2
Option 3
Option 4
Option 5
```

### ToggleButton
1)XAML
``` XML
```

### DatePicker
1)XAML
``` XML
```

### Slider
1)XAML
``` XML
```

### ProgressBar
1)XAML
``` XML
```

### DataGrid
1)XAML Mode 1
``` XML
```
2)XAML Mode 2
``` XML
```

### ListBox
1)XAML
``` XML
```

### ListView
1)XAML
``` XML
```

### TreeView
1)XAML
``` XML
```

### Expander
1)XAML
``` XML
```


### GroupBox
1)XAML
``` XML
```

### TabControl
1)XAML
``` XML
```

### GridSplitter
1)XAML
``` XML
```

### Blue
``` XAML
```

### Green
``` XAML
```

### Red
``` XAML
```

### Orange
``` XAML
```

### Purple
``` XAML
```

[^_^]:








