复制并粘贴Silverlight

时间:2009-06-22 16:19:14

标签: silverlight copy-paste

如何在Silverlight文本块中禁用复制和粘贴功能?

3 个答案:

答案 0 :(得分:4)

我认为你的意思是TextBox而不是TextBlock,因为后者不提供剪切和粘贴。

我认为最简单的方法是从TextBox派生并覆盖密钥处理以防止剪贴板操作快捷方式。如果您希望I18N支持允许在不同系统上使用不同的快捷方式,则需要扩展此基本解决方案,但对于标准Ctrl + V,Ctrl + C(或Mac上的Apple + C和Apple + V),这应该可行。您可能还想将Ctrl + Ins视为Ctrl + V的替代方法(我不确定Silverlight是否支持此功能,但可能会这样做。)

答案 1 :(得分:1)

关于上述问题,以下文章可能有所帮助......

自定义Silverlight TextBox with contextmenu(剪切,复制,粘贴和删除)

http://www.codeproject.com/KB/silverlight/SLCusTxtBox.aspx

答案 2 :(得分:1)

这里的答案不是你想要听到的,但这是恕我直言的最正确方式。

TextBlock不支持复制/粘贴。标签也没有。我似乎记得这是他们被渲染到屏幕的方式。

我所知道的最好方法是使用TextBox并对其进行样式设置,使其看起来像TextBlock或Label。

这是一个很好的简单风格供您试用和修改 - 它应该可以正常工作。

<Style x:Key="ReadonlyTextBox" TargetType="TextBox">
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="Background" Value="#FFFFFFFF"/>
    <Setter Property="Foreground" Value="#FF000000"/>
    <Setter Property="Padding" Value="2"/>
    <Setter Property="IsReadOnly" Value="True"/>
    <Setter Property="BorderBrush">
        <Setter.Value>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="#FFA3AEB9" Offset="0"/>
                <GradientStop Color="#FF8399A9" Offset="0.375"/>
                <GradientStop Color="#FF718597" Offset="0.375"/>
                <GradientStop Color="#FF617584" Offset="1"/>
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TextBox">
                <Grid x:Name="RootElement">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal"/>
                            <VisualState x:Name="MouseOver"/>
                            <VisualState x:Name="Disabled"/>
                            <VisualState x:Name="ReadOnly">
                                <Storyboard>
                                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="ReadOnlyVisualElement"/>
                                    <ColorAnimation Duration="0" To="#00C9C9C9" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ReadOnlyVisualElement" d:IsOptimized="True"/>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="FocusStates">
                            <VisualState x:Name="Focused"/>
                            <VisualState x:Name="Unfocused"/>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="ValidationStates">
                            <VisualState x:Name="Valid"/>
                            <VisualState x:Name="InvalidUnfocused"/>
                            <VisualState x:Name="InvalidFocused"/>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <Border x:Name="Border" CornerRadius="1" Opacity="1">
                        <Grid>
                            <Border x:Name="ReadOnlyVisualElement" Background="#5EC9C9C9" Opacity="0"/>
                            <ScrollViewer x:Name="ContentElement" BorderThickness="0" IsTabStop="False" Padding="{TemplateBinding Padding}" Margin="1,1,-1,1"/>
                        </Grid>
                    </Border>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

现在你已经有了一堆Find&amp;替换以忙于: - )