WPF XAML 如何 Binding 靜态類資源
- 方法 一 :通過{Binding MailPattern , Source={x:Static controls:RegexPatterns.Instance}}
- 方法 二 (遇到再補充)
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的靜态對象。