Скрытие адреса электронной почты в строке - PullRequest
0 голосов
/ 11 мая 2018

Я строю строку, в которой мне нужно скрыть адрес электронной почты.

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;
}

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Шаг 1: Добавьте следующий код XAML в Window.Resources.

<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: Замените код XAML TextBlock следующим фрагментом кода.

<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;
    }
}

Надеюсь, это будет соответствовать вашим требованиям.

0 голосов
/ 11 мая 2018

Я бы хотел, чтобы вы воспользовались 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.

Ваш вывод будет выглядеть так в Viewer enter image description here

...