Control Controlz لـ WPF
دعم .NET Framework (4.5.2 ، 4.6.2 وأكبر) ، .NET Core (3.1) و .NET 5 (على Windows)

يمكن استخدام TextBoxInputMaskBehavior لإظهار قناع داخل TextBox .
ملاحظة: إنه مجرد قناع ولا يتحقق من صحة النص.
< 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 >تم أخذ TextBoxInputmaskbehavior الأصلي من مدونة Blindmeis.

KeyboardNavigationEx هو فئة مساعد لمشكلة التركيز المشتركة. تركيز عنصر واجهة المستخدم نفسه ليس هو المشكلة. ولكن إذا استخدمنا أساليب التركيز المشتركة ، فإن التحكم يحصل على التركيز ، لكنه لا يحصل على النمط البصري التركيز.
تتعامل فئة KeyboardNavigation الأصلية مع النمط المرئي فقط إذا كان عنصر التحكم يحصل على التركيز من جهاز لوحة المفاتيح أو إذا كان SystemParameters.KeyboardCues صحيحًا.
مع KeyboardNavigationEx يمكنك إصلاح هذا بطريقتين بسيطتين.
في الكود وراء:
public partial class MainWindow : Window
{
public MainWindow ( )
{
InitializeComponent ( ) ;
this . Loaded += ( s , e ) => { KeyboardNavigationEx . Focus ( this . TheElementWhichShouldGetTheFocus ) ; } ;
}
}أو في XAML:
< Button controlzex:KeyboardNavigationEx.AlwaysShowFocusVisual= " True " >Hey, I get the focus visual style on mouse click!</ Button >تلميح الأدوات المتحرك التلقائي. مزيد من المعلومات.
< 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 > يضيف GlowWindowBehavior توهجًا حول نافذتك.
بدءًا من Windows 11 ، يمكن استخدام السلوك للتحكم في لون حدود النافذة الأصلية ويقوم بذلك تلقائيًا ، عند اكتشاف Windows 11.
يمكن إيقاف تشغيل هذا عن طريق الإعداد PreferDWMBorder إلى false .
يوفر Controlzex كروم مخصص لنوافذ WPF وبعض الإصلاحات الأعمق الأخرى لذلك.
ما توفره:
WindowStyle ( None ، SingleBorderWindow ، ThreeDBorderWindow و ToolWindow )IsNCActiveCornerPreference التحكمNonClientControlProperties.HitTestResult و NonClientControlProperties.ClickStrategy )معظم الإصلاحات والتحسينات هي من mahapps.metro و fluent.ribbon.
التنفيذ الملموس للتقنيات الموضحة هنا:
إدخال المدونة من Microsoft على النافذة المخصصة Chrome
إنها شوكة من مكتبة تكامل شل Microsoft WPF الأصلية. يمكن العثور على تطبيق Microsoft الحالي:
Popup المخصصة التي يمكن استخدامها في قوالب خطأ التحقق من الصحة أو أي شيء آخر كما في MaterialDesignInxamlToolkit أو Mahapps.metro.
يوفر PopupEx بعض الميزات الرائعة الإضافية:
TabControl المخصص الذي يحافظ على محتوى TabItem في VisualTree أثناء إلغاء تحديدها ، لذلك لا يتم إعادة إنشاء كابوس ، بعد اختيار TabItem مرة أخرى. يمكن تعيين سلوك الرؤية عن طريق خاصية تبعية ChildContentVisibility .
الاستخدام:
< 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 >فئة أساسية للمساعدة في قيادة طريقة شائعة لإنشاء حزم رمز في WPF.
لإنشاء حزمة رمز جديدة اتبع الخطوات هذه:
حدد مفتاحًا (عادةً enum ):
public enum PackIconKind
{
Happy ,
Sad
} فئة فرعية PackIconBase ، مضيفا
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" }
} ;
}
}قدم نمطًا افتراضيًا (عادةً في generic.xaml ، على سبيل المثال:
< 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 >يجب أن يكون لدى المستخدمين الآن طريقة بسيطة لاستخدام حزمة الرمز الخاصة بك في تطبيقاتهم:
< ns : PackIcon Kind = " HappyIcon " /> يوفر Controlzex The ThemeManager الذي يساعدك على توفير العلم لتطبيقك.
لمزيد من المعلومات ، راجع هذا القسم.
ترخيص معهد ماساتشوستس للتكنولوجيا (MIT)
حقوق الطبع والنشر (ج) منذ عام 2015 يناير كرجر ، باستيان شميدت ، جيمس ويلوك
يتم منح الإذن بموجب هذا ، مجانًا ، لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة به ("البرنامج") ، للتعامل في البرنامج دون تقييد ، بما في ذلك على سبيل المثال لا الحصر حقوق استخدام الأشخاص ونسخها ودمجها ودمجها وتوزيعها وتوزيعها على ما يلي:
يجب إدراج إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الكبيرة من البرنامج.
يتم توفير البرنامج "كما هو" ، دون أي ضمان من أي نوع ، صريح أو ضمني ، بما في ذلك على سبيل المثال لا الحصر ضمانات القابلية للتسويق واللياقة لغرض معين وعدم الانفجار. لا يجوز بأي حال من الأحوال أن يكون المؤلفون أو حاملي حقوق الطبع والنشر مسؤولاً عن أي مطالبة أو أضرار أو مسؤولية أخرى ، سواء في إجراء عقد أو ضرر أو غير ذلك ، ناشئة عن أو خارج البرنامج أو الاستخدام أو غيرها من المعاملات في البرنامج.