Controlz compartilhado para WPF
Suporte .NET Framework (4.5.2, 4.6.2 e maior), .NET CORE (3.1) e .NET 5 (nas janelas)

O TextBoxInputMaskBehavior pode ser usado para mostrar uma máscara dentro de uma TextBox .
Nota: é apenas uma máscara e não valida seu texto.
< TextBlock Grid.Row= " 0 "
Grid.Column= " 0 "
Margin = " 4 "
Text = " Datetime " />
< TextBox Grid.Row= " 0 "
Grid.Column= " 1 "
Margin = " 4 " >
< behaviors : Interaction .Behaviors>
< controlzEx : TextBoxInputMaskBehavior InputMask = " 00/00/0000 " />
</ behaviors : Interaction .Behaviors>
</ TextBox >
< TextBlock Grid.Row= " 1 "
Grid.Column= " 0 "
Margin = " 4 "
Text = " Phone Number " />
< TextBox Grid.Row= " 1 "
Grid.Column= " 1 "
Margin = " 4 " >
< behaviors : Interaction .Behaviors>
< controlzEx : TextBoxInputMaskBehavior InputMask = " ( 999 ) 000 000 - 00 "
PromptChar = " _ " />
</ behaviors : Interaction .Behaviors>
</ TextBox >O original TextBoxInputMaskbehavior foi retirado do blog de Blindmeis.

O KeyboardNavigationEx é uma classe auxiliar para um problema de foco comum. O foco de um elemento da interface do usuário em si não é o problema. Mas se usarmos os métodos de foco comuns, o controle obtém o foco, mas não recebe o estilo visual do foco.
A classe original KeyboardNavigation lida com o estilo visual somente se o controle obtiver o foco de um dispositivo de teclado ou se o SystemParameters.KeyBoardCues for verdadeiro.
Com KeyboardNavigationEx você pode corrigir isso de duas maneiras simples.
Em Code Bastes:
public partial class MainWindow : Window
{
public MainWindow ( )
{
InitializeComponent ( ) ;
this . Loaded += ( s , e ) => { KeyboardNavigationEx . Focus ( this . TheElementWhichShouldGetTheFocus ) ; } ;
}
}ou em xaml:
< Button controlzex:KeyboardNavigationEx.AlwaysShowFocusVisual= " True " >Hey, I get the focus visual style on mouse click!</ Button >Uma dica de ferramenta de movimentação automática. Mais informações.
< Button Margin = " 5 "
Padding = " 5 "
Content = " Test Button 2 "
ToolTipService.ShowDuration= " 20000 " >
< Button .ToolTip>
< ToolTip local:ToolTipAssist.AutoMove= " True " >
< ToolTip .Template>
< ControlTemplate >
< Grid >
< Border Background = " Gray "
BorderBrush = " Black "
BorderThickness = " 1 "
Opacity = " 0.9 "
SnapsToDevicePixels = " True " />
< TextBlock Margin = " 5 "
Foreground = " WhiteSmoke "
FontSize = " 22 "
Text = " ToolTipHelper AutoMove sample "
TextOptions.TextFormattingMode= " Display "
TextOptions.TextRenderingMode= " ClearType " />
</ Grid >
</ ControlTemplate >
</ ToolTip .Template>
</ ToolTip >
</ Button .ToolTip>
</ Button > O GlowWindowBehavior adiciona um brilho ao redor da janela.
Começando com o Windows 11, o comportamento pode ser usado para controlar a cor da borda da janela nativa e o faz automaticamente, quando o Windows 11 é detectado.
Isso pode ser desligado ao definir PreferDWMBorder para false .
O Controlzex fornece um Chrome personalizado para o WPF Windows e algumas outras correções mais profundas para ele.
O que ele fornece:
WindowStyle ( None , SingleBorderWindow , ThreeDBorderWindow e ToolWindow )IsNCActiveCornerPreference )NonClientControlProperties.HitTestResult e NonClientControlProperties.ClickStrategy )A maioria das correções e melhorias são de mahapps.metro e fluente.Ribbon.
Implementação concreta de técnicas descritas aqui:
Entrada do blog da Microsoft no Custom Window Chrome
É um garfo da biblioteca original da Microsoft WPF Shell Integration. A implementação atual da Microsoft pode ser encontrada:
Popup personalizado que pode ser usado em modelos de erro de validação ou em algo como no materialDesigninxamlToolkit ou mahapps.metro.
PopupEx fornece alguns recursos adicionais agradáveis:
TabControl personalizado que mantém o conteúdo TabItem no VisualTree enquanto os usa, para que não seja feito o Recreate Nightmare, depois de selecionar o TabItem novamente. O comportamento da visibilidade pode ser definido pela propriedade ChildContentVisibility Dependência.
Uso:
< controlz : TabControlEx >
< TabItem Header = " Lorem " >
< TextBlock Text = " Lorem ipsum dolor sit amet, consetetur sadipscing "
HorizontalAlignment = " Center "
FontSize = " 30 " />
</ TabItem >
< TabItem Header = " ipsum " >
< TextBox Text = " Lorem ipsum dolor sit amet, consetetur sadipscing "
HorizontalAlignment = " Center "
Margin = " 5 " />
</ TabItem >
</ controlz : TabControlEx >Uma classe base para ajudar a direcionar um método comum para criar pacotes de ícones no WPF.
Para criar um novo pacote de ícones, siga estas etapas:
Defina uma chave (normalmente uma enum ):
public enum PackIconKind
{
Happy ,
Sad
} Subclasse PackIconBase , adicionando
public class PackIcon : PackIconBase < PackIconKind >
{
static PackIcon ( )
{
DefaultStyleKeyProperty . OverrideMetadata ( typeof ( PackIcon ) , new FrameworkPropertyMetadata ( typeof ( PackIcon ) ) ) ;
}
public PackIcon ( ) : base ( CreateIconData )
{ }
private static IDictionary < PackIconKind , string > CreateIconData ( )
{
return new Dictionary < PackIconKind , string >
{
{ PackIconKind . Happy , "M20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12M22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12M10,9.5C10,10.3 9.3,11 8.5,11C7.7,11 7,10.3 7,9.5C7,8.7 7.7,8 8.5,8C9.3,8 10,8.7 10,9.5M17,9.5C17,10.3 16.3,11 15.5,11C14.7,11 14,10.3 14,9.5C14,8.7 14.7,8 15.5,8C16.3,8 17,8.7 17,9.5M12,17.23C10.25,17.23 8.71,16.5 7.81,15.42L9.23,14C9.68,14.72 10.75,15.23 12,15.23C13.25,15.23 14.32,14.72 14.77,14L16.19,15.42C15.29,16.5 13.75,17.23 12,17.23Z" } ,
{ PackIconKind . Sad , "M20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12M22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12M15.5,8C16.3,8 17,8.7 17,9.5C17,10.3 16.3,11 15.5,11C14.7,11 14,10.3 14,9.5C14,8.7 14.7,8 15.5,8M10,9.5C10,10.3 9.3,11 8.5,11C7.7,11 7,10.3 7,9.5C7,8.7 7.7,8 8.5,8C9.3,8 10,8.7 10,9.5M12,14C13.75,14 15.29,14.72 16.19,15.81L14.77,17.23C14.32,16.5 13.25,16 12,16C10.75,16 9.68,16.5 9.23,17.23L7.81,15.81C8.71,14.72 10.25,14 12,14Z" }
} ;
}
}Forneça um estilo padrão (normalmente no seu genérico.xaml, por exemplo:
< Style TargetType = " {x:Type local:PackIcon} " >
< Setter Property = " Height " Value = " 16 " />
< Setter Property = " Width " Value = " 16 " />
< Setter Property = " HorizontalAlignment " Value = " Left " />
< Setter Property = " VerticalAlignment " Value = " Top " />
< Setter Property = " IsTabStop " Value = " False " />
< Setter Property = " Template " >
< Setter .Value>
< ControlTemplate TargetType = " {x:Type local:PackIcon} " >
< Viewbox >
< Canvas Width = " 24 " Height = " 24 " >
< Path Data = " {Binding Data, RelativeSource={RelativeSource TemplatedParent}} "
Fill = " {TemplateBinding Foreground} " />
</ Canvas >
</ Viewbox >
</ ControlTemplate >
</ Setter .Value>
</ Setter >
</ Style >Seus usuários agora devem ter uma maneira simples de usar seu pacote de ícones em seus aplicativos:
< ns : PackIcon Kind = " HappyIcon " /> O Controlzex fornece um ThemeManager que ajuda você a fornecer a eles o seu aplicativo.
Para mais informações, consulte esta seção.
A licença do MIT (MIT)
Copyright (C) Desde 2015 Jan Karger, Bastian Schmidt, James Willock
A permissão é concedida, gratuita, a qualquer pessoa que obtenha uma cópia deste software e arquivos de documentação associados (o "software"), para lidar com o software sem restrição, inclusive sem limitação os direitos de usar, copiar, modificar, mesclar, publicar, distribuir, mobilizar o software e/ou vender cópias do software e permitir que as pessoas a quem
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou em partes substanciais do software.
O software é fornecido "como está", sem garantia de qualquer tipo, expresso ou implícito, incluindo, entre outros, as garantias de comercialização, aptidão para uma finalidade específica e não innoculação. Em nenhum caso os autores ou detentores de direitos autorais serão responsáveis por qualquer reclamação, danos ou outro passivo, seja em uma ação de contrato, delito ou não, decorrente de, fora ou em conexão com o software ou o uso ou outras negociações no software.