Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在xaml中运行时将特定单词作为超链接_C#_Wpf_Silverlight_Xaml_Mvvm - Fatal编程技术网

C# 如何在xaml中运行时将特定单词作为超链接

C# 如何在xaml中运行时将特定单词作为超链接,c#,wpf,silverlight,xaml,mvvm,C#,Wpf,Silverlight,Xaml,Mvvm,我在silverlight(windows phone)应用程序中使用MVVM模型。我的视图中有一个名为“状态”的文本块。此文本块将显示事务的状态。如果用户未注册,则显示消息“您未向我们注册。请在此处注册”。单词“此处”应该是一个超链接。如果用户注册了我们,然后我们说“最后登录在xx xx xxxx” My View.xaml具有: <TextBlock Name="lblStatusValue" Text="{Binding Status}"

我在silverlight(windows phone)应用程序中使用MVVM模型。我的视图中有一个名为“状态”的文本块。此文本块将显示事务的状态。如果用户未注册,则显示消息“您未向我们注册。请在此处注册”。单词“此处”应该是一个超链接。如果用户注册了我们,然后我们说“最后登录在xx xx xxxx”

My View.xaml具有:

<TextBlock Name="lblStatusValue" 
           Text="{Binding Status}"  
           TextWrapping="Wrap"   FontSize="23"  
/>                                
是否可以选择一个特定的单词,并将其作为我们想要显示的任何消息中的超链接?因为我使用的是MVVM模型,所以我不知道如何在运行时添加对象(我在hyperlink中尝试了使用Run控件,但在MVVM中我们如何实现这一点?)

我是否必须在View.cs中添加下面这样的代码,而不能从ViewModel.cs中添加


与其使用黑客,不如试试简单明了的方法?两本不同的书怎么样?例如

<Grid>
    <Label Text="{Binding YourNormalTextComesHere}" 
           Visibility="{Binding IsUserNew, Converter={StaticResource BoolToVisibilityConv}, ConverterParameter=Not}" />
    <StackPanel Orientation=Horizontal 
                Visibilty="{Binding IsUserNew, Converter={StaticResource BoolToVisibilityConv}}">
        <Label Text="Your not registered with us. Please register "/>
        <HyperLink NavigateUri="...">here</HyperLink>
    </StackPanel>
</Grid>
我假设其余的都很清楚,因为您熟悉
MVVM
a.s.o


希望这有点帮助。

这条线也有类似的功能。这可能对您有帮助。我认为为了避免对实现的最大干扰(听起来像在同一个代码>文本块您想要有混合文本和链接),您可以考虑使用<代码> ReXTrimeBox < /C>。使用它,您可以内联定义超链接:
TemplateSelector
在这里似乎很合适。但是,不能用<代码>文本块< /代码>使用它,所以我会考虑使用<代码> TemplateSelector < <代码> >两个>代码>数据板< /代码> s,一个具有超链接,一个没有它……查找如何使用XAML中的段落。然后,您可以将文本分成多个部分。这可能会有帮助:
<Grid>
    <Label Text="{Binding YourNormalTextComesHere}" 
           Visibility="{Binding IsUserNew, Converter={StaticResource BoolToVisibilityConv}, ConverterParameter=Not}" />
    <StackPanel Orientation=Horizontal 
                Visibilty="{Binding IsUserNew, Converter={StaticResource BoolToVisibilityConv}}">
        <Label Text="Your not registered with us. Please register "/>
        <HyperLink NavigateUri="...">here</HyperLink>
    </StackPanel>
</Grid>
[ValueConversion(typeof (bool?), typeof (Visibility))]
public class BoolToVisibilityConverter : IValueConverter
{
    public const string Invert = "Not";
    private const string TypeIsNotAllowed = "The type '{0}' is not allowed.";

    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var boolValue = value as bool?;
        if (boolValue == null)
            throw new NotSupportedException(String.Format(TypeIsNotAllowed, value.GetType().Name));

        return ((boolValue.Value && !IsInverted(parameter)) || (!boolValue.Value && IsInverted(parameter))) 
            ? Visibility.Visible 
            : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var visibilityValue = value as Visibility?;
        if (visibilityValue == null)
            throw new NotSupportedException(String.Format(TypeIsNotAllowed, value.GetType().Name));

        return visibilityValue == Visibility.Visible && !IsInverted(parameter);
    }

    #endregion

    private static bool IsInverted(object param)
    {
        var strParam = param as string;
        if (param == null || string.IsNullOrEmpty(strParam))
            return false;

        return strParam.Equals(Invert, StringComparison.InvariantCultureIgnoreCase);
    }
}