2

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

4

3 回答 3

4

我会假设您的意思是后者TextBoxTextBlock提供剪切和粘贴功能。

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

于 2009-06-22T17:41:40.367 回答
1

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

带有上下文菜单的自定义 Silverlight 文本框(剪切、复制、粘贴和删除)

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

于 2011-02-09T19:34:47.220 回答
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>

现在你有一堆查找和替换要忙于:-)

于 2011-06-06T13:41:43.423 回答