修复了文本框中的文本

本文关键字:文本 | 更新日期: 2023-09-27 18:32:32

如何动态地将固定文本添加到文本框中?我所说的"固定文本"是指用户输入无法删除的文本。

例如,CMD 中的路径:

C:'Program Files>cd ..
C:'>

修复了文本框中的文本

我假设你想要一个可编辑的文本框,它的开头有一些用户无法编辑的固定文本。 如果是这样,那么这似乎有效 - 它基于在 Blend 中提取的标准文本框样式......

需要在 xaml 根中具有以下命名空间声明:

     xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"

然后使用此模板:

    <ControlTemplate TargetType="{x:Type TextBox}">
        <Microsoft_Windows_Themes:ListBoxChrome x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderFocused="{TemplateBinding IsKeyboardFocusWithin}" SnapsToDevicePixels="true">
        <StackPanel Orientation="Horizontal">
            <TextBlock VerticalAlignment="Center">This is fixed:</TextBlock>
            <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
          </StackPanel>
    </Microsoft_Windows_Themes:ListBoxChrome>
    <ControlTemplate.Triggers>
        <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

如果要将其包装在自定义控件或用户控件中,则可以通过自定义属性以编程方式设置固定文本。

当您动态填充文本时,文本框是否为真? 如果使用 MVVM 将 IsReadOnly 绑定到 ViewModel 中的某个属性,则当该 ViewModel 填充文本时,该属性将 IsReadOnly 绑定

您可以改用文本块。如果必须使用文本框,则可以以只读方式将 IsReadOnly 属性更改为"True"

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (textBox1.SelectionStart < LengthOfFixedString)
        e.SuppressKeyPress = true;
}