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的静态对象。

方法 二 (遇到再补充)

猜你喜欢

转载自blog.csdn.net/weixin_41045657/article/details/115031296