Skip to content

Instantly share code, notes, and snippets.

@smailliwcs
smailliwcs / Forms.xaml
Last active September 22, 2020 15:31
Pixel-perfect WPF forms
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="CheckBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CheckBox}">
<Border Padding="0,6,0,5">
<Grid x:Name="templateRoot" Background="Transparent" SnapsToDevicePixels="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
@smailliwcs
smailliwcs / App.cs
Created September 22, 2020 15:25
WPF application boilerplate
using System;
using System.IO;
using System.Text;
using System.Windows;
public partial class App : Application
{
[STAThread]
private static void Main(string[] args)
{
@smailliwcs
smailliwcs / Shlwapi.cs
Created September 22, 2020 15:25
Compacting paths
using System.Runtime.InteropServices;
using System.Text;
public static class Shlwapi
{
[DllImport("shlwapi.dll")]
public static extern bool PathCompactPathEx(StringBuilder pszOut, string pszSrc, uint cchMax, uint dwFlags);
public static string CompactPath(string path, int length)
{
@smailliwcs
smailliwcs / MessageLoop.cs
Created September 22, 2020 15:25
Messing with message loops
using System;
using System.Threading;
using System.Windows.Forms;
public class MessageLoop
{
private Thread thread;
private SynchronizationContext context;
private ManualResetEvent initialized;
@smailliwcs
smailliwcs / dirty.html
Created September 22, 2020 15:25
Dirty checks for HTML forms
<form>
<label>
First name
<input type="text" />
</label>
<label>
Last name
<input type="text" />
</label>
<button type="submit">Submit</button>
@smailliwcs
smailliwcs / ClickOnce.targets
Last active September 22, 2020 15:25
Taming ClickOnce deployments
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildDir>$(SolutionDir)Build\</BuildDir>
<Rebuilding>false</Rebuilding>
</PropertyGroup>
<PropertyGroup Condition="'$(OutputType)' == 'Exe' Or '$(OutputType)' == 'WinExe'">
<StartAction>Program</StartAction>
<StartWorkingDirectory>$(BuildDir)</StartWorkingDirectory>
<StartProgram>$(BuildDir)$(TargetFileName)</StartProgram>
@smailliwcs
smailliwcs / Program.cs
Created September 22, 2020 15:25
Rolling your own settings
using System;
public partial class Settings
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Program
{
@smailliwcs
smailliwcs / autocrop.py
Created September 22, 2020 15:25
Autocropping in Python
import argparse
import Image
import ImageChops
def parseArgs():
parser = argparse.ArgumentParser()
parser.add_argument("source", metavar = "SOURCE")
parser.add_argument("target", metavar = "TARGET")
return parser.parse_args()
@smailliwcs
smailliwcs / Program.cs
Created September 22, 2020 15:25
Single-instance applications
using System;
using System.Windows;
internal static class Program
{
public static void Main(string[] args)
{
SingleInstanceExecuter executer = new SingleInstanceExecuter();
executer.Executing += (sender, e) =>
{
@smailliwcs
smailliwcs / TransformAppConfig.targets
Created September 22, 2020 15:25
Configuration transforms in non-web projects
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="TransformAppConfig" AfterTargets="Build" Condition="Exists('App.config') AND Exists('App.$(Configuration).config')">
<TransformXml Source="App.config" Transform="App.$(Configuration).config" Destination="$(OutDir)$(TargetFileName).config" />
</Target>
</Project>