如何使WPF标签可选?

时间:2017-04-03 13:21:52

标签: wpf data-binding label wpf-controls

我只想从UI窗口复制标签内容。任何人都可以帮忙如何制作它?

2 个答案:

答案 0 :(得分:3)

我和你有同样的问题。 我希望我的标签可以选择。

我找不到合适的方法,而是使用带有自定义样式的TextBox。

<Style x:Key="TextBoxAsLabel" TargetType="{x:Type TextBox}">
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Padding" Value="0"/>
    <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
    <Setter Property="HorizontalContentAlignment" Value="Left"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
    <Setter Property="AllowDrop" Value="False"/>
    <Setter Property="FontFamily" Value="Arial"/>
    <Setter Property="HorizontalAlignment" Value="Stretch" />
    <Setter Property="VerticalAlignment" Value="Center" />
    <Setter Property="TextWrapping" Value="Wrap"/>
    <Setter Property="FontSize" Value="11"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBox}">
                <themes:ClassicBorderDecorator x:Name="Bd" BorderThickness="0" BorderStyle="Sunken" Background="{TemplateBinding Background}">
                    <ScrollViewer x:Name="PART_ContentHost" BorderBrush="Transparent" BorderThickness="0"/>
                </themes:ClassicBorderDecorator>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsReadOnly" Value="true">
                        <Setter Property="Background" TargetName="Bd" Value="Transparent"/>
                        <Setter Property="Foreground" Value="Black"/>
                        <Setter Property="BorderThickness" Value="0,0,0,0"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

您还需要将其添加到命名空间:

xmlns:themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic"

用法是:<TextBox Text="{Binding ValueToBind}" IsReadOnly="True" Style="{DynamicResource TextBoxAsLabel}" />

注意:根据需要更改样式绑定类型。

希望这会对你有所帮助:)。

答案 1 :(得分:3)

您不必覆盖整个模板。试试这个:

<TextBox Text="Copy this...">
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Setter Property="IsReadOnly" Value="True" />
            <Setter Property="BorderThickness" Value="0" />
            <Setter Property="TextWrapping" Value="Wrap" />
        </Style>
    </TextBox.Style>
</TextBox>

上述样式应该为您提供一个看似TextBoxTextBlock的可选Label