Shared ControlZ für WPF
Unterstützung von .NET Framework (4.5.2, 4.6.2 und größer), .NET Core (3.1) und .NET 5 (unter Windows)

Mit dem TextBoxInputMaskBehavior kann eine Maske in einem TextBox angezeigt werden.
Hinweis: Es ist nur eine Maske und bestätigt Ihren Text nicht.
< 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 >Das ursprüngliche Textboxinputmaskabehavior wurde aus dem Blog von Blindmeis entnommen.

Der KeyboardNavigationEx ist eine Helferklasse für ein gemeinsames Fokussierungsproblem. Der Fokus eines UI -Elements selbst ist nicht das Problem. Wenn wir jedoch die gemeinsamen Fokussierungsmethoden verwenden, erhält das Steuerelement den Fokus, erhält jedoch nicht den visuellen Fokus -Stil.
Die ursprüngliche KeyboardNavigation -Klasse übernimmt nur dann den visuellen Stil, wenn das Steuerelement einen Fokus von einem Tastaturgerät erhält oder wenn die Systemparameter.Keyboardcues wahr sind.
Mit KeyboardNavigationEx können Sie dies auf zwei einfache Arten beheben.
Im Code hinter:
public partial class MainWindow : Window
{
public MainWindow ( )
{
InitializeComponent ( ) ;
this . Loaded += ( s , e ) => { KeyboardNavigationEx . Focus ( this . TheElementWhichShouldGetTheFocus ) ; } ;
}
}oder in xaml:
< Button controlzex:KeyboardNavigationEx.AlwaysShowFocusVisual= " True " >Hey, I get the focus visual style on mouse click!</ Button >Ein automatisches Bewegungstolutip. Weitere Informationen.
< 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 > Das GlowWindowBehavior fügt ein Leuchten um Ihr Fenster hinzu.
Beginnend mit Windows 11 kann das Verhalten verwendet werden, um die Farbe des nativen Fensterrandes zu steuern, und dies automatisch, wenn Windows 11 erkannt wird.
Dies kann ausgeschaltet werden, indem PreferDWMBorder auf false festgelegt wird.
Controlzex bietet ein benutzerdefiniertes Chrom für WPF -Fenster und einige andere tiefere Korrekturen dafür.
Was es bietet:
WindowStyle ( None , SingleBorderWindow , ThreeDBorderWindow und ToolWindow )IsNCActive EigenschaftCornerPreference )NonClientControlProperties.HitTestResult und NonClientControlProperties.ClickStrategy )Die meisten Korrekturen und Verbesserungen stammen von Mahapps.metro und fluent.ribbon.
Konkrete Implementierung von hier beschriebenen Techniken:
Blogeintrag von Microsoft auf benutzerdefiniertem Fenster Chrome
Es ist eine Gabel der ursprünglichen Microsoft WPF -Shell -Integrationsbibliothek. Die aktuelle Implementierung von Microsoft kann gefunden werden:
Benutzerdefiniertes Popup , das in Validierungsfehlervorlagen oder in etwas anderem wie in Materiellesigninxamltoolkit oder Mahapps.metro verwendet werden kann.
PopupEx bietet einige zusätzliche nette Funktionen:
Benutzerdefinierte TabControl , die den TabItem Inhalt im VisualTree hält, während sie diese nicht ausgewählt haben, sodass nach der erneuten Auswahl des TabItem kein neuer Albtraum abgeschlossen ist. Das Sichtbarkeitsverhalten kann durch die Abhängigkeit ChildContentVisibility festgelegt werden.
Verwendung:
< 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 >Eine Basisklasse, mit der eine gemeinsame Methode zum Erstellen von Symbolpackungen in WPF vorgestellt werden kann.
Um ein neues Symbolpaket zu erstellen, folgen Sie folgenden Schritten:
Definieren Sie einen Schlüssel (typischerweise eine enum ):
public enum PackIconKind
{
Happy ,
Sad
} Unterklasse PackIconBase , Hinzufügen
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" }
} ;
}
}Geben Sie einen Standardstil an (in der Regel in Ihrem generic.xaml, z. B.:
< 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 >Ihre Benutzer sollten jetzt eine einfache Möglichkeit haben, Ihr Symbolpaket in ihren Anwendungen zu verwenden:
< ns : PackIcon Kind = " HappyIcon " /> Controlzex bietet einem ThemeManager , der Ihnen hilft, Ihre App zu tätigen.
Weitere Informationen finden Sie in diesem Abschnitt.
Die MIT -Lizenz (MIT)
Copyright (c) seit 2015 Jan Karger, Bastian Schmidt, James Willock
Die Erlaubnis wird hiermit einer Person, die eine Kopie dieser Software und zugehörigen Dokumentationsdateien (der "Software") erhält, kostenlos erteilt, um die Software ohne Einschränkung zu behandeln, einschließlich ohne Einschränkung der Rechte, zu verwenden, zu kopieren, zu modifizieren, zusammenzufassen, zu veröffentlichen, zu veröffentlichen, zu verteilen, zu verteilt, und/oder Kopien der Software zu ermöglichen, um Personen zu beanstanden, an denen die Software zugänglich ist, um die folgenden Bedingungen zu beantragen.
Die oben genannte Copyright -Mitteilung und diese Erlaubnisbekanntmachung müssen in alle Kopien oder wesentlichen Teile der Software enthalten sein.
Die Software wird "wie es ist" ohne Garantie jeglicher Art, ausdrücklich oder stillschweigend bereitgestellt, einschließlich, aber nicht beschränkt auf die Gewährleistung der Handelsfähigkeit, die Eignung für einen bestimmten Zweck und die Nichtverletzung. In keinem Fall sind die Autoren oder Urheberrechtsinhaber für Ansprüche, Schäden oder andere Haftungen haftbar, sei es in einer Vertragsklage, unerbittlich oder auf andere Weise, die sich aus oder im Zusammenhang mit der Software oder anderen Geschäften in der Software ergeben.