WPF XAML 如何 Binding 静态类资源
PS :一段时间不写WPF,有些技术都忘记具体怎么实现了。蛋疼啊。以后遇到一个技术就写下来吧。
方法 一 :通过{Binding MailPattern , Source={x:Static controls:RegexPatterns.Instance}}
1:先举例一个资源类RegexPatterns。
namespace DN.Controls.Util
{
public sealed class RegexPatterns
{
private static RegexPatterns _instance;
public static RegexPatterns Instance
{
get
{
if (_instance == null)
_instance = new RegexPatterns();
return _instance;
}
protected set => _instance = value;
}
/// <summary>
/// 邮件正则匹配表达式
/// </summary>
public string MailPattern {
get; } =
@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
}
}
2:XAML 使用
<Grid x:Class="DN.ORM.Designer.ServerConfigForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="http://schemas.denisvuyka.wordpress.com/DN.Controls"
Margin="10">
<Grid.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/DN.Controls;component/Themes/Styles/TextBox.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<controls:MSTextBox Width="300"
controls:InfoElement.Necessary="True"
controls:InfoElement.Placeholder=""
controls:InfoElement.RegexPattern="{Binding MailPattern , Source={x:Static controls:RegexPatterns.Instance}}"
controls:InfoElement.Title="服务器IP"
controls:InfoElement.TitlePlacement="Left"
controls:InfoElement.TitleWidth="120"
ShowClearButton="True" />
</Grid>
观察下面这段代码:
"{Binding MailPattern , Source={x:Static controls:RegexPatterns.Instance}}"
其中
x:Static :引用的静态属性可用于在 XAML 中提供属性的值。
controls:指向 RegexPatterns类的域名空间。
[assembly: XmlnsDefinition(“http://schemas.denisvuyka.wordpress.com/DN.Controls”, “DN.Controls.Util”)]
RegexPatterns.Instance :RegexPatterns的静态对象。