如何禁用 Silverlight 文本块中的复制和粘贴功能?
sekar
问问题
10749 次
3 回答
4
我会假设您的意思是后者TextBox
不TextBlock
提供剪切和粘贴功能。
我认为最简单的方法是派生TextBox
并覆盖键处理以防止剪贴板操作快捷方式。如果您希望 I18N 支持以允许在不同系统上使用不同的快捷方式,则需要扩展此基本解决方案,但对于标准 Ctrl+V、Ctrl+C(或 Mac 上的 Apple+C 和 Apple+V),这应该可以工作。您可能还想考虑 Ctrl+Ins 作为 Ctrl+V 的替代品(我不确定 Silverlight 是否支持此功能,但它可能支持)。
于 2009-06-22T17:41:40.367 回答
1
关于上述问题,以下文章可能会有所帮助...
带有上下文菜单的自定义 Silverlight 文本框(剪切、复制、粘贴和删除)
于 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 回答