-2

だからここに行く、私はwpfでac#プロジェクトを作成し、テキストを区切る線でテキストボックスを作成しようとして立ち往生しています。

現時点では、次のようなテキストボックスを取得しています。

ここに画像の説明を入力してください

「-------」を使用する代わりに、テキストボックスに事前定義された行を作成します。これは可能ですか?

凝集 テキストボックスは実行時に編集可能です

描画された線には、次のプロパティが必要です。

  • 編集可能であってはなりません!
  • 空の行だけではいけません
  • 幅のある目に見える線である必要がありますline.width = box.width
4

2 に答える 2

0

あなたの質問を読み直すと、あなたが望むことをする最良の方法は、これに特化した属性を持つ独自のユーザーコントロールを作成することだと思います。C#ユーザーコントロールについて調査すると、その方法がわかるでしょう。

于 2012-12-09T18:00:09.587 に答える
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 に答える