2012-12-09 59 views
-2

所以在这里,我在wpf中创建了一个c#项目,并且我试图用一行文本框来创建文本框。用划线划分文本框中的单独文本?

目前,我得到这样的文本框:

enter image description here

而不是使用“-------”我想在文本框中预定义线。这可能吗 ?

Agg。文本框在运行时

绘制的线条编辑应具备的特性:

  • 它不应该被编辑能!
  • 它不仅应该是一个空行
  • 它应该是一个可见的行宽度为line.width = box.width
+0

拆分文本?那是什么意思?根据什么拆分?两部分?这是三个部分。 – Paparazzi

+0

我的文章是将文本框中的文本分开的黑色线条。 在这种情况下,两条分隔线 – Anonymous

+0

@ user1735774为什么不是列表框? –

回答

0

如果你不需要一个完整的文本框实现,那么这可能会有所帮助。它没有显示光标等,但它可能会给你一个开始。

enter image description here

第一下转换器添加到您的项目。

public class TextLineConverter : MarkupExtension, IValueConverter 
{ 
    static TextLineConverter converter; 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     string[] results = null; 
     string newText = value as string; 
     if (newText != null) 
     { 
      results = newText.Split('\r'); 
      if (results.Length > 0) 
       for (int i = 0; i < results.Length; i++) 
        if (results[i].Length > 0) 
         if (results[i][0] == '\n') 
          results[i] = results[i].Substring(1, results[i].Length - 1); 
     } 
     return results; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     if (converter == null) converter = new TextLineConverter(); 
     return converter; 
    } 

    public TextLineConverter() 
    { 
    } 
} 

和下面的样式。

<Style TargetType="TextBox"> 
      <Style.Resources> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="Margin" Value="0"/> 
        <Setter Property="Padding" Value="0"/> 
        <Setter Property="IsEnabled" Value="False"/> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate> 
           <Border BorderThickness="0,0,0,2" BorderBrush="Black" > 
           <ContentPresenter Content="{Binding}" /> 
           </Border> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </Style.Resources> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="TextBox"> 
         <ListView Focusable="False" ItemsSource="{Binding Text, Converter={local:TextLineConverter}, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource TemplatedParent}}"/> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
0

在重读您的问题时,我相信最好的方法是创建您自己的用户控件,该控件具有专门用于此目的的属性。做一些关于C#用户控件的研究,也许你会发现如何做到这一点。

+0

嘿嘿,那不是我正在寻找的,而是我必须说的一个聪明而简单的答案。 我想在“-----”的位置“画”一条可见的黑线。 \ n \ n只是一个“空”的行。 – Anonymous