A set of custom UWP controls and utilities that I have built for my apps. I will continue to add to this repo from my personal collection of doo-dads and bobbles and as a I build new ones 🚀
| Branch | Build Status |
|---|---|
master |
| Component (w/ jumplink) | Namespace | Description |
|---|---|---|
| AdaptiveGridView | UwpHelpers.Controls.ListControls |
Maintains aspect ratio of items as column width changes |
| BusyIndicators | UwpHelpers.Controls.BusyIndicators |
Custom busy indicators |
| BlurElementAsync | UwpHelpers.Examples.Helpers |
Converts any UIElement into a blurred bitmap |
| IncrementalLoadingCollection | UwpHelpers.Controls.Common |
Use this for lazy-loading scenarios, demo in Examples |
| NetworkImage | UwpHelpers.Controls.ImageControls |
An Image control that shows download progress |
| DownloadStreamWithProgressAsync | UwpHelpers.Controls.Extensions |
HttpClient Extension methods that reports download progress |
| ReleaseNotesDialog | UwpHelpers.Controls.Dialogs |
Shows a list of Features and Fixes using the familiar ContentDialog approach |
- MinItemWidth -
double: Sets minimum width of GridView items. - MinItemHeight -
double: Sets the minimum height of GridView items.
<listControls:AdaptiveGridView ItemsSource="{Binding ListItems}"
MinItemHeight="105"
MinItemWidth="315">- BandBusyIndicator
- DownloadUploadIndicator
- IsActive -
boolean: Shows or hides the indicator. - Direction -
AnimationDirection: The direction of the animation. - DisplayMessage -
string: Message shown when active. - DisplayMessageSize -
double: Message font size.
<busyIndicators:BandBusyIndicator IsActive="{Binding IsBusy}"
DisplayMessage="busy..."
Direction="Uploading" />//You can pass any UIElement to the method and it will render all of the children into a bitmap with a Blur applied
var blurredElement = await ContentToBlur.BlurElementAsync();
//example: you can then set Background brush of a Grid
ContentRootGrid.Background = new ImageBrush
{
ImageSource = blurredBitmapImage,
Stretch = Stretch.UniformToFill
};<ListView ItemsSource="{Binding InfiniteItems}" />ViewModel or Code-Behind
InfiniteItems = new IncrementalLoadingCollection<T>((cancellationToken, count) => Task.Run(GetMoreData, cancellationToken));
//and GetMoreData is
private async Task<ObservableCollection<T>> GetMoreData()
{
return more items of type ObservableCollection<T>
}- ImageUrl -
string: String URL of the photo. - IsActive -
bool: The control manages this automatically, but you can manually enable/disable if needed . - DownloadPercentageVisibility -
Visibility: If you want to hide the progress percentage. - ProgressRingVisibility -
Visibility: If you want to hide the ProgressRing animation. - ImageStretch -
Stretch: Stretch property passed to the underlying Image control.
<imageControls:NetworkImage ImageUrl="http://bigimages.com/MyHugeImage.jpg" />- Url -
string: Url of the thing you want to download. - Reporter -
Progress<DownloadProgressArgs>- reports the progress via event args.
Note: There are a couple more methods in the helper class (i.e. DownloadStringwithProgressAsync)
void SetupReporter()
{
var reporter = new Progress<DownloadProgressArgs>();
reporter.ProgressChanged += Reporter_ProgressChanged;
var imageStream = await new HttpClient(myFavoriteHandler).DownloadStreamWithProgressAsync(bigImageUrl, reporter)
}
private void Reporter_ProgressChanged(object sender, DownloadProgressArgs e)
{
SomeProgressBar.Value = e.PercentComplete;
}- AppName -
string: Sets the dialog title (default value is "Release Notes"). - Features -
ObservableCollection<string>: List of new features. - Fixes -
ObservableCollection<string>: List of fixes. - UseFullVersionNumber -
bool: Determines whether to show the manifest build number (e.g. 1.0.0).
var rnd = new ReleaseNotesDialog();
rnd.AppName = "My App Name";
rnd.Message = "Thank you for checking out ReleaseNotesDialog! Here's a list of what's new and what's fixed:";
rnd.Features = new ObservableCollection<string>
{
"Amazing feature!",
"Added theming",
"Backup and restore added!"
};
rnd.Fixes = new ObservableCollection<string>
{
"Fixed crash when opening",
"Added text wrapping to fix text being cut off"
};
await rnd.ShowAsync();Lancelot Software © 2010-2021







