Silverlight テキストブロックでコピー アンド ペースト機能を無効にするにはどうすればよいですか?
3 に答える
後者はカットアンドペーストを提供しないとTextBox
いうよりも、あなたが意味していると思います。TextBlock
これを行う最も簡単な方法はTextBox
、キー処理から派生させてオーバーライドし、クリップボード操作のショートカットを防ぐことだと思います。異なるシステムで異なるショートカットを許可する I18N サポートが必要な場合は、この基本的なソリューションを拡張する必要がありますが、標準の Ctrl+V、Ctrl+C (または Mac では Apple+C と Apple+V) の場合、これは機能するはずです。Ctrl+V の代わりに Ctrl+Ins を検討することもできます (Silverlight がこれをサポートしているかどうかはわかりませんが、可能性はあります)。
上記の質問に関しては、次の記事が役立つかもしれません...
コンテキスト メニュー (切り取り、コピー、貼り付け、および削除) を備えたカスタム Silverlight TextBox
ここでの答えは、あなたが聞きたいものではありませんが、最も正しい方法です。
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>
これで、忙しくするための検索と置換がたくさんできました:-)