如何在Silverlight文本块中禁用复制和粘贴功能?
答案 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(剪切,复制,粘贴和删除)
答案 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;替换以忙于: - )