Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > перевод строки в ListBox


Автор: AlexLogos 10.11.2011, 23:48
Народ, не пинайте сильно  smile . Пишу строку в ListBox.Add(str), хочу чтоб строка str отображалась внесколько строк, поэтому вставляю в нее перевод строки Environment.NewLine, а оно не работает... Получаю квадратики. Что делать?

Автор: Brilona 11.11.2011, 09:42
Убрать из str перевод строки Environment.NewLine и подправить шаблон для ListBoxItem, чтобы каждый элемент отображался как TextBlock с переносом строк (название свойства точно не скажу, но что-то типа TextWraping).

Автор: RastaDja 11.11.2011, 09:45
Цитата(AlexLogos @  11.11.2011,  00:48 Найти цитируемый пост)
хочу чтоб строка str отображалась внесколько строк

Если это WPF тогда можно переопределить шаблон ListBox-а. Если WinForm, тогда создать свой унаследованый класс от ListBox. Пример есть вот http://www.codeproject.com/KB/combobox/nishmullinlisbox.aspx.

Автор: AlexLogos 12.11.2011, 00:36
А как преопределить шаблон ListBox-а?

Автор: Lols 12.11.2011, 02:43
Цитата(AlexLogos @ 12.11.2011,  00:36)
А как преопределить шаблон ListBox-а?

Вопрос тот же :(
http://msdn.microsoft.com/ru-ru/library/system.windows.controls.listbox(v=vs.95).aspx
здесь искала, но что-то не совсем поняла.

Автор: RastaDja 14.11.2011, 13:37
Цитата(AlexLogos @  12.11.2011,  01:36 Найти цитируемый пост)
А как преопределить шаблон ListBox-а?

В действительности, если быть точнее, то шаблон ListBoxItem-а
Код

<Window x:Class="ListBox.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <!-- Вот это шаблон -->
        <DataTemplate x:Key="MyTmpl">
            <Border Name="border" BorderThickness="1" Padding="5" Margin="0">
                <Grid>
                    <TextBlock TextWrapping="Wrap" Text="{Binding Text}"/>
                </Grid>
            </Border>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <!-- ItemTemplate="{StaticResource MyTmpl}" это подключение шаблона к листбоксу, параметры HorizontalContentAlignment и ScrollViewer.HorizontalScrollBarVisibility обязательны -->
        <ListBox Name="listBox1" ItemTemplate="{StaticResource MyTmpl}" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
    </Grid>
</Window>

Код

//...
namespace ListBox
{
    public class Sample
    {
        public String Text { get; set; }
    }

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            listBox1.Items.Add(new Sample() { Text = "this is long-long-long-long-long-long-long-long-long-long-long-long text" });
            listBox1.Items.Add(new Sample() { Text = "this is long-long-long-long-long-long-long-long-long-long-long-long text" });
            listBox1.Items.Add(new Sample() { Text = "this is long-long-long-long-long-long-long-long-long-long-long-long text" });
        }
    }
}

Автор: AlexLogos 15.11.2011, 12:21
Ладно, спрошу еще раз. Товарисчи, я програмирую в C# второй день, как переопределить шаблон ListBox-а? Где находится вот эта штука?
Код

<Window x:Class="ListBox.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <!-- Вот это шаблон -->
        <DataTemplate x:Key="MyTmpl">
            <Border Name="border" BorderThickness="1" Padding="5" Margin="0">
                <Grid>
                    <TextBlock TextWrapping="Wrap" Text="{Binding Text}"/>
                </Grid>
            </Border>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <!-- ItemTemplate="{StaticResource MyTmpl}" это подключение шаблона к листбоксу, параметры HorizontalContentAlignment и ScrollViewer.HorizontalScrollBarVisibility обязательны -->
        <ListBox Name="listBox1" ItemTemplate="{StaticResource MyTmpl}" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
    </Grid>
</Window>

Как ее найти? как должен выглядеть StaticResource MyTmpl и где он храниться?

Автор: RastaDja 15.11.2011, 22:00
Цитата(AlexLogos @  15.11.2011,  13:21 Найти цитируемый пост)
Ладно, спрошу еще раз. Товарисчи, я програмирую в C# второй день, как переопределить шаблон ListBox-а? 

тогда тибе надо почитать о WPF для начала. А конкретнее о шаблонах в WPF.

Цитата(AlexLogos @  15.11.2011,  13:21 Найти цитируемый пост)
Где находится вот эта штука?

Эта "штука" находится в файле MainWindow.xaml
Цитата(AlexLogos @  15.11.2011,  13:21 Найти цитируемый пост)
Как ее найти?

в Solution explorer. (если канешно у тебя не Win Forms проект)

Цитата(AlexLogos @  15.11.2011,  13:21 Найти цитируемый пост)
как должен выглядеть StaticResource MyTmpl и где он храниться? 

он хранится в том же файлике MainWindow.xaml, и начинается с <DataTemplate x:Key="MyTmpl">

Автор: AlexLogos 16.11.2011, 01:35
Мдя... А у меня как раз Win Forms. В этом случае как решить?

Автор: RastaDja 16.11.2011, 13:23
создать WPFProject. А если без WinForm никак, тогда перейдите по ссылке в моем первом посте.

Автор: AlexLogos 17.11.2011, 10:10
Спасибо, буду разбираться...

Автор: AlexLogos 8.12.2011, 15:34
Цитата(RastaDja @ 11.11.2011,  09:45)
Цитата(AlexLogos @  11.11.2011,  00:48 Найти цитируемый пост)
хочу чтоб строка str отображалась внесколько строк

Если это WPF тогда можно переопределить шаблон ListBox-а. Если WinForm, тогда создать свой унаследованый класс от ListBox. Пример есть вот http://www.codeproject.com/KB/combobox/nishmullinlisbox.aspx.

Спасибо RastaDja, разобрался ка подключить этот компонент

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)