Скопируйте и вставьте в Silverlight - PullRequest
2 голосов
/ 22 июня 2009

Как отключить функцию копирования и вставки в текстовом блоке Silverlight?

Ответы [ 3 ]

4 голосов
/ 22 июня 2009

Я предполагаю, что вы имеете в виду TextBox, а не TextBlock, так как последний не обеспечивает вырезание и вставку.

Я думаю, что самый простой способ сделать это - извлечь из TextBox и переопределить обработку клавиш, чтобы избежать ярлыков операций с буфером обмена. Вам необходимо расширить это базовое решение, если вы хотите, чтобы поддержка I18N позволяла использовать разные сочетания клавиш в разных системах, но для стандартных Ctrl + V, Ctrl + C (или Apple + C и Apple + V на Mac) это должно работать. Возможно, вы также захотите рассмотреть Ctrl + Ins как альтернативу Ctrl + V (я не уверен, что Silverlight поддерживает это, но это возможно).

1 голос
/ 06 июня 2011

Ответ здесь не тот, который вы захотите услышать, но это самый правильный путь ИМХО.

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 & Replace, чтобы заняться: -)

1 голос
/ 09 февраля 2011

Относительно вопроса выше, может помочь следующая статья ...

Пользовательский текстовый блок Silverlight с контекстным меню (вырезать, копировать, вставить и удалить)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...