-2

就这样,我在 wpf 中制作了 ac# 项目,并且我坚持尝试制作一个带有分隔文本的行的文本框。

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

在此处输入图像描述

而不是使用“-------”我想在文本框中创建一个预定义的行。这可能吗 ?

聚合酶。文本框在运行时可编辑

绘制的线应具有以下属性:

  • 它不应该是可编辑的!
  • 它不应该只是一个空行
  • 它应该是一条具有宽度的可见线line.width = box.width
4

2 回答 2

0

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

在此处输入图像描述

首先将以下转换器添加到您的项目中。

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>
于 2012-12-10T11:17:28.627 回答
0

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

于 2012-12-09T18:00:09.587 回答