在silverlight中复制超链接内容

在silverlight中复制超链接内容,silverlight,hyperlink,copy,mouse,selection,Silverlight,Hyperlink,Copy,Mouse,Selection,如何使用鼠标在silverlight中复制超链接内容。与在文本框中复制的方式类似 我想知道如何在silverlight中选择超链接中的内容,我目前正在使用HyperlinkTextStyle,它周围会出现一个矩形,但当我尝试用鼠标选择超链接中的内容时,我无法选择 我使用以下样式: <Setter.Value> <ControlTemplate TargetType="HyperlinkButton"> <Grid Cu

如何使用鼠标在silverlight中复制超链接内容。与在文本框中复制的方式类似

我想知道如何在silverlight中选择超链接中的内容,我目前正在使用HyperlinkTextStyle,它周围会出现一个矩形,但当我尝试用鼠标选择超链接中的内容时,我无法选择

我使用以下样式:

<Setter.Value>
    <ControlTemplate TargetType="HyperlinkButton">
        <Grid
            Cursor="{TemplateBinding Cursor}"
            Background="{TemplateBinding Background}">
            <vsm:VisualStateManager.VisualStateGroups>
              <vsm:VisualStateGroup x:Name="CommonStates">
                <vsm:VisualState x:Name="Normal"/>
                <vsm:VisualState x:Name="MouseOver">
                  <Storyboard>
                    <ObjectAnimationUsingKeyFrames
                      Duration="0"
                      Storyboard.TargetName="UnderlineTextBlock"
                      Storyboard.TargetProperty="Visibility">
                      <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
                    </ObjectAnimationUsingKeyFrames>
                  </Storyboard>
                </vsm:VisualState>
                <vsm:VisualState x:Name="Pressed">
                  <Storyboard>
                    <DoubleAnimation Duration="0" To="0.5"
                      Storyboard.TargetProperty="Opacity"
                      Storyboard.TargetName="TextElement"/>
                  </Storyboard>
                </vsm:VisualState>
                <vsm:VisualState x:Name="Disabled">
                  <Storyboard>
                    <ObjectAnimationUsingKeyFrames Duration="0"
                      Storyboard.TargetName="DisabledOverlay"
                      Storyboard.TargetProperty="Visibility">
                      <DiscreteObjectKeyFrame
                        KeyTime="0" Value="Visible"/>
                    </ObjectAnimationUsingKeyFrames>
                  </Storyboard>
                </vsm:VisualState>
              </vsm:VisualStateGroup>
              <vsm:VisualStateGroup x:Name="FocusStates">
                <vsm:VisualState x:Name="Focused">
                  <Storyboard>
                    <DoubleAnimationUsingKeyFrames
                      Storyboard.TargetName="FocusVisualElement"
                      Storyboard.TargetProperty="Opacity">
                      <SplineDoubleKeyFrame KeyTime="0" Value="1"/>
                    </DoubleAnimationUsingKeyFrames>
                  </Storyboard>
                </vsm:VisualState>
                <vsm:VisualState x:Name="Unfocused"/>
              </vsm:VisualStateGroup>
            </vsm:VisualStateManager.VisualStateGroups>
            <Border Background="{TemplateBinding Background}"
                Margin="{StaticResource PhoneHorizontalMargin}"
                Padding="{TemplateBinding Padding}">
                <TextBlock x:Name="TextElement"
                    HorizontalAlignment="{TemplateBinding
                        HorizontalContentAlignment}"
                    Text="{TemplateBinding Content}"
                    TextDecorations="Underline"
                    VerticalAlignment="{TemplateBinding
                    VerticalContentAlignment}"
                    TextWrapping="Wrap"
                    IsSelectionActive="True"/>
                <TextBlock
                    HorizontalAlignment="{TemplateBinding
                        HorizontalContentAlignment}"
                    Margin="{TemplateBinding Padding}"
                    x:Name="UnderlineTextBlock"
                    VerticalAlignment="{TemplateBinding
                        VerticalContentAlignment}"
                    Visibility="Collapsed"
                    Text="{TemplateBinding Content}"
                    TextDecorations="Underline"
                    Foreground="{TemplateBinding Foreground}"/>
                <TextBlock
                    HorizontalAlignment="{TemplateBinding
                        HorizontalContentAlignment}"
                    Margin="{TemplateBinding Padding}"
                    x:Name="DisabledOverlay"
                    VerticalAlignment="{TemplateBinding
                        VerticalContentAlignment}"
                    Visibility="Collapsed"
                    Canvas.ZIndex="1"
                    Foreground="{StaticResource DisabledColor}"
                    Text="{TemplateBinding Content}"/>
                <ContentPresenter
                    HorizontalAlignment="{TemplateBinding
                        HorizontalContentAlignment}"
                    Margin="{TemplateBinding Padding}"
                    x:Name="contentPresenter"
                    VerticalAlignment="{TemplateBinding
                        VerticalContentAlignment}"
                    Content="{TemplateBinding Content}"
                    ContentTemplate="{TemplateBinding ContentTemplate}"/>
                <Rectangle
                    x:Name="FocusVisualElement"
                    IsHitTestVisible="false"
                    Opacity="0"
                    Stroke="{StaticResource SecondaryBrush}"
                    StrokeThickness="1"/>

获取具有可选文本的超链接的最简单方法是使用。请尝试以下示例:

<RichTextBlock>
    <Paragraph>
        <Span></Span>
        <Hyperlink NavigateUri="http://www.stackoverflow.com">Selectable</Hyperlink>
        <Span></Span>
    </Paragraph>
</RichTextBlock>
但这有点棘手,因为您需要确定用户是单击进行选择,还是单击进行导航。也许最好的方法是同时处理鼠标下降和鼠标上升事件,如果两者之间的时间小于x毫秒,则执行导航

此外,要使鼠标单击事件正常工作,必须使用AddHandler添加侦听器,因为TextBox本身在控件内部处理鼠标单击。比如说:

private DateTime? _downClickTime;

public MyPage()
{
    InitializeComponent();

    txt.AddHandler(MouseLeftButtonUpEvent, new MouseButtonEventHandler(TextBox_MouseLeftButtonUp), true);
    txt.AddHandler(MouseLeftButtonDownEvent, new MouseButtonEventHandler(TextBox_MouseLeftButtonDown), true);
}

private void TextBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    _downClickTime = DateTime.Now;
}

private void TextBox_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    if (_downClickTime.HasValue && DateTime.Now.Subtract(_downClickTime.Value).TotalMilliseconds < 200)
    {
        var textBox = (TextBox)sender;
        string url = textBox.Tag as string;
        HtmlPage.Window.Navigate(new Uri(url));
    }
    _downClickTime = null;
}

我为这种要求找到了解决办法。希望能对我们有所帮助

                            <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" />
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </vsm:VisualState>
                            <vsm:VisualState x:Name="Pressed">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="UnderlineTextBlock" Storyboard.TargetProperty="Visibility">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" />
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </vsm:VisualState>
                            <vsm:VisualState x:Name="Disabled">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="DisabledOverlay" Storyboard.TargetProperty="Visibility">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" />
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </vsm:VisualState>
                        </vsm:VisualStateGroup>
                        <vsm:VisualStateGroup x:Name="FocusStates">
                            <vsm:VisualState x:Name="Focused">
                                <Storyboard>
                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SelectingText" Storyboard.TargetProperty="Opacity">
                                        <SplineDoubleKeyFrame KeyTime="0" Value="0.25" />
                                    </DoubleAnimationUsingKeyFrames>

                                </Storyboard>
                            </vsm:VisualState>
                            <vsm:VisualState x:Name="Unfocused" >
                                <Storyboard>
                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SelectingText" Storyboard.TargetProperty="Opacity">
                                        <SplineDoubleKeyFrame KeyTime="0" Value="0" />
                                    </DoubleAnimationUsingKeyFrames>
                                </Storyboard>
                            </vsm:VisualState>
                        </vsm:VisualStateGroup>
                    </vsm:VisualStateManager.VisualStateGroups>

                    <!--<TextBox   Margin="{TemplateBinding Padding}"  Foreground="{TemplateBinding Foreground}"
                              IsReadOnly="True"
                               x:Name="SelectingText" 
                               Text="{TemplateBinding Content}"   Opacity="0"  />-->

                    <TextBox x:Name="SelectingText" Background="Transparent" Foreground="Transparent" FontWeight="{TemplateBinding FontWeight}" 
                             FontStyle="{TemplateBinding FontStyle}" FontSize="{TemplateBinding FontSize}" FontFamily="{TemplateBinding FontFamily}" IsReadOnly="True"
                             Margin="{TemplateBinding Padding}" 
                              Text="{TemplateBinding Content}"  Opacity="0"
                            />

                    <TextBlock HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" x:Name="UnderlineTextBlock" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Visibility="Collapsed" Text="{TemplateBinding Content}" TextDecorations="Underline" Foreground="{TemplateBinding Foreground}" />
                    <TextBlock HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" x:Name="DisabledOverlay" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Visibility="Collapsed" Canvas.ZIndex="1" Foreground="{StaticResource DisabledColor}" Text="{TemplateBinding Content}" />
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" x:Name="contentPresenter" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" />
                    <Rectangle x:Name="FocusVisualElement" IsHitTestVisible="false" Opacity="0" Stroke="{StaticResource SecondaryBrush}" StrokeThickness="1" />

                </Grid>
在下划线处用textblock替换textbox,并在mousemove中使用

                            <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" />
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </vsm:VisualState>
                            <vsm:VisualState x:Name="Pressed">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="UnderlineTextBlock" Storyboard.TargetProperty="Visibility">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" />
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </vsm:VisualState>
                            <vsm:VisualState x:Name="Disabled">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="DisabledOverlay" Storyboard.TargetProperty="Visibility">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" />
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </vsm:VisualState>
                        </vsm:VisualStateGroup>
                        <vsm:VisualStateGroup x:Name="FocusStates">
                            <vsm:VisualState x:Name="Focused">
                                <Storyboard>
                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SelectingText" Storyboard.TargetProperty="Opacity">
                                        <SplineDoubleKeyFrame KeyTime="0" Value="0.25" />
                                    </DoubleAnimationUsingKeyFrames>

                                </Storyboard>
                            </vsm:VisualState>
                            <vsm:VisualState x:Name="Unfocused" >
                                <Storyboard>
                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SelectingText" Storyboard.TargetProperty="Opacity">
                                        <SplineDoubleKeyFrame KeyTime="0" Value="0" />
                                    </DoubleAnimationUsingKeyFrames>
                                </Storyboard>
                            </vsm:VisualState>
                        </vsm:VisualStateGroup>
                    </vsm:VisualStateManager.VisualStateGroups>

                    <!--<TextBox   Margin="{TemplateBinding Padding}"  Foreground="{TemplateBinding Foreground}"
                              IsReadOnly="True"
                               x:Name="SelectingText" 
                               Text="{TemplateBinding Content}"   Opacity="0"  />-->

                    <TextBox x:Name="SelectingText" Background="Transparent" Foreground="Transparent" FontWeight="{TemplateBinding FontWeight}" 
                             FontStyle="{TemplateBinding FontStyle}" FontSize="{TemplateBinding FontSize}" FontFamily="{TemplateBinding FontFamily}" IsReadOnly="True"
                             Margin="{TemplateBinding Padding}" 
                              Text="{TemplateBinding Content}"  Opacity="0"
                            />

                    <TextBlock HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" x:Name="UnderlineTextBlock" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Visibility="Collapsed" Text="{TemplateBinding Content}" TextDecorations="Underline" Foreground="{TemplateBinding Foreground}" />
                    <TextBlock HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" x:Name="DisabledOverlay" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Visibility="Collapsed" Canvas.ZIndex="1" Foreground="{StaticResource DisabledColor}" Text="{TemplateBinding Content}" />
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" x:Name="contentPresenter" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" />
                    <Rectangle x:Name="FocusVisualElement" IsHitTestVisible="false" Opacity="0" Stroke="{StaticResource SecondaryBrush}" StrokeThickness="1" />

                </Grid>