Как установить всплывающую подсказку с множеством строк для каждого (динамического) элемента списка в Silverlight - PullRequest
1 голос
/ 02 октября 2011

Я бы хотел установить в Silverlight для каждого элемента в ListBox всплывающую подсказку с несколькими строками.

В XAML у меня есть список и кнопка:

<ListBox Height="100" HorizontalAlignment="Left" Margin="24,136,0,0" Name="listBox1" VerticalAlignment="Top" Width="109" ItemsSource="{Binding}">
<Button Content="Add"  Name="button_add" VerticalAlignment="Top" Width="118" Click="add_Click">

в c #

private void button_add_Click(object sender, RoutedEventArgs e)
    {
        ObservableCollection<Person> obs1 = new ObservableCollection<Person>();
        obs1.Add(new Person(){Name="Name1", Age=1});
        obs1.Add(new Person(){Name="Name2", Age=2});
        listBox1.ItemsSource = obs1;
        // This Line of Code MUST NOT BE USED!! listBox1.DisplayMemberPath = "Name";          
    }
public class Person
{
    public String Name { get; set; }
    public int Age { get; set; }

    public override string ToString()
    {
        return Name;
    }
}

Я бы хотел показать для каждого предмета Возраст в качестве подсказки.

Редактировать: Хорошо, это решение для отображения только AGE в качестве всплывающей подсказки. Это одна строка / строка.

                <ListBox Height="100" HorizontalAlignment="Left" Margin="24,136,0,0" Name="listBox1" VerticalAlignment="Top" Width="109" ItemsSource="{Binding}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                                <TextBlock Text="{Binding Name}" ToolTipService.ToolTip="{Binding Age}"/>
                            </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

Но что, если я хочу показать всплывающую подсказку с двумя строками? что-то вроде:

 Name: Name1
 Age: 1

Редактировать: 3 строки, 2 столбца. я также добавил публичный комментарий String {set; получить; } в класс Person

                    <ListBox Height="100" HorizontalAlignment="Left" Margin="24,136,0,0" Name="listBox1" VerticalAlignment="Top" Width="109" ItemsSource="{Binding}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <ToolTipService.ToolTip>
                                    <ToolTip>
                                        <Grid>
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="20"></RowDefinition>
                                                <RowDefinition Height="20"></RowDefinition>
                                                <RowDefinition Height="40"></RowDefinition>
                                            </Grid.RowDefinitions>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="80"/>
                                                <ColumnDefinition Width="250"/>

                                            </Grid.ColumnDefinitions>
                                            <TextBlock Text="Name: " Grid.Row="0" Grid.Column="0" />
                                            <TextBlock Text="{Binding Name}" Grid.Row="0" Grid.Column="1"/>
                                            <TextBlock Text="Age: " Grid.Row="1" Grid.Column="0"/>
                                            <TextBlock Text="{Binding Age}" Grid.Row="1" Grid.Column="1"/>
                                            <TextBlock Text="Comment: " Grid.Row="2" Grid.Column="0"/>
                                            <TextBlock Text="{Binding Comment}" Grid.Row="2" Grid.Column="1" TextWrapping="Wrap" />
                                        </Grid>
                                    </ToolTip>
                                </ToolTipService.ToolTip>
                                <TextBlock Text="{Binding Name}" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

Но есть еще проблема. Комментарий может быть коротким или длинным, поэтому я бы хотел, чтобы ROWS / LINES / SPACE для Comment были переменными, иначе текст обрезается.

1 Ответ

0 голосов
/ 02 октября 2011

Вы можете использовать любые элементы управления для содержания всплывающей подсказки:

<ToolTipService.ToolTip>
    <StackPanel Orientation="Vertical">
        <TextBlock Text="{Binding Name}" />
        <TextBlock Text="{Binding Age}" />
    </StackPanel>
</ToolTipService.ToolTip>

Другая возможность - использовать конвертер, который возвращает Name и Age, разделенные \r\n.

...