Как я могу сделать TextBlock доступным для выбора, чтобы пользователь мог скопировать его текст

Возможный дубликат:
Можно ли выбрать текстовый блок WPF?

Могу ли я сделать текстовый блок, который можно выбрать в приложении WPF, чтобы пользователь мог его скопировать.

Спасибо заранее.

DJ

Ответ 1

Вы можете просто превратить его в TextBox, который доступен только для чтения, который выглядит просто как TextBlock, вроде как;

<Style x:Key="ReadOnlyTextBox" TargetType="TextBox">
   <Setter Property="IsReadOnly" Value="True" />
   <Setter Property="Padding" Value="5"/>
   <Setter Property="Margin" Value="0"/>
   <Setter Property="Background" Value="Transparent"/>
   <Setter Property="BorderBrush" Value="Transparent"/>
   <Setter Property="BorderThickness" Value="0"/>
   <Setter Property="IsTabStop" Value="False"/>
   <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/>
   <Setter Property="VerticalScrollBarVisibility" Value="Disabled"/>
   <Setter Property="Template">
      <Setter.Value>
         <ControlTemplate TargetType="TextBox">
            <Grid x:Name="RootElement">
               <ScrollViewer x:Name="ContentElement"
                             Margin="{TemplateBinding Margin}"
                             Background="{TemplateBinding Background}"
                             BorderBrush="{TemplateBinding BorderBrush}"
                             BorderThickness="{TemplateBinding BorderThickness}"
                             IsTabStop="{TemplateBinding IsTabStop}"
                             Padding="{TemplateBinding Padding}" 
                             HorizontalScrollBarVisibility="{TemplateBinding HorizontalScrollBarVisibility}"
                             VerticalScrollBarVisibility="{TemplateBinding VerticalScrollBarVisibility}"/>
            </Grid>
         </ControlTemplate>
      </Setter.Value>
   </Setter>
</Style>

ScrollViewer ContentElement по умолчанию будет в TextBox, вместо этого вы можете заменить ContentPresenter, если хотите.

Затем введем его в действие;

<TextBox Text="Blah Blah Blah you can copy me!" Style="{StaticResource ReadOnlyTextBox}"/>

Надеюсь, это поможет!

ДОБАВЛЕНИЕ: Как отметил @doodleus в комментариях. Может потребоваться шаблон, связывающий свойство Content в шаблоне. Поскольку "ContentElement" является именованной частью элемента управления Silverlight TextBox. Один из немногих нюансов, которые можно наблюдать в разных вариантах xaml. Я не должен был обращать внимание на теги, когда я изначально создал этот пример. Так что ему было приятно поправлять меня.