【问题标题】:Hiding an email address in string在字符串中隐藏电子邮件地址
【发布时间】:2018-10-21 12:36:04
【问题描述】:

我正在构建一个字符串,我必须在其中隐藏一个电子邮件地址。

string StatusText = "Please reach out here for access."

只是想知道如何在字符串中隐藏电子邮件地址。我希望“这里”是一个电子邮件地址。我必须将 StatusText 绑定到一个文本块,这样当用户点击“这里”时,outlook 邮件应该会打开。

详细代码如下:

View.xaml

<TextBlock   Text="{Binding StatusText}" />

ViewModel.cs

private string _statusText;
public string StatusText
{
            get { return _statusText; }
            set { SetProperty(ref _statusText, value); }
}


DisplayMessages()
{
  //based on the boolean value, Status Text is set
  //When the case is "NoAccess", I want the "here" of StatusText to be clickable and show the mailaddress as abc@abc.com
  switch(Flag)
   case IsReady:
       StatusText = "Application is Ready";
     break;
   case NoAccess:
     StatusText = "Please reach out here. No access can be provided."
    break;
}

【问题讨论】:

  • string contactDetails = "Please reach out to your contact@domain.com for access." 你的问题是什么?您的意思是要使用LinkLabel 控件吗?
  • @Saveen 你认为这会达到什么效果?
  • @John 我已经编辑了问题以获得更多理解。
  • OP this 回答你的问题了吗?
  • @user42067 他们为什么不一次问整个问题?这不是询问然后逐渐编辑问题的正确方法。没有人可以帮助您采用这种方法。

标签: c# wpf string email hyperlink


【解决方案1】:

第 1 步: 在 Window.Resources 中添加以下 XAML 代码。

<local:DataTemplateSelectorExt x:Key="Selector"></local:DataTemplateSelectorExt>

<DataTemplate x:Key="NoAccess">
        <TextBlock Background="Green">
            <Run Text="Please reach out "/>
            <Hyperlink NavigateUri="abc@gmail.com" RequestNavigate="Hyperlink_RequestNavigate">here</Hyperlink>
            <Run Text=" for access."/>
        </TextBlock>
    </DataTemplate>

第 2 步: 将 TextBlock XAML 代码替换为以下代码 sn-p。

<Label Content="{Binding StatusText}" ContentTemplateSelector="{Binding Source={StaticResource Selector}}" />

第 3 步: 在 MainWindow 类中添加以下方法。

private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
    {
        Popup popup = new Popup { IsOpen = true, Width = 100, Height = 50, Placement = PlacementMode.Mouse };
        popup.Child = new TextBlock { Text = (sender as Hyperlink).NavigateUri.ToString(), Background = Brushes.Green };
        popup.IsOpen = true;            
    }

第 4 步: 最后在您的项目中添加以下类。

public class DataTemplateSelectorExt : DataTemplateSelector
{
    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        if (item == null) return (DataTemplate)null;

        FrameworkElement frameworkElement = container as FrameworkElement;

        if (item.Equals("Please reach out here. No access can be provided."))
            return Application.Current.MainWindow.FindResource("NoAccess") as DataTemplate;

            return null;
    }
}

希望,这将满足您的要求。

【讨论】:

  • 非常感谢。这正是我想要的。
【解决方案2】:

我希望你能利用XAML

<TextBlock>
    <Run Text="Please reach out "/>
    <Hyperlink NavigateUri="YOUR_URL_FOR_OUTLOOK" RequestNavigate="Hyperlink_RequestNavigate">here</Hyperlink>
    <Run Text=" for access."/>
</TextBlock>

在后面的代码中

private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
    Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
    e.Handled = true;
}

使用这种方法的主要好处是您可以使用Binding 将您的emailId 绑定到Hyperlink

您的输出在查看器中将如下所示

【讨论】:

  • 我在我的问题中添加了更多细节
猜你喜欢
  • 2016-11-24
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2017-05-10
  • 2013-10-16
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多