2011-10-02 54 views
1

我想在Silverlight中爲ListBox中的每個項目設置一個包含許多行的工具提示。如何爲Silverlight中的每個(動態)列表框項目設置工具提示

在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; 
    } 
} 

我想顯示每個項目的年齡爲我的提示。

編輯:好的,這是隻顯示年齡爲工具提示的解決方案。這是一行/行。

   <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> 

但是如果我想顯示2行的工具提示呢?例如:

Name: Name1 
Age: 1 

編輯:3行,2列。我還添加了公共字符串註釋{set;得到; } to class 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可變,否則文本被截斷。

回答

0

你可以使用任何控件工具提示內容:

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

另一種可能是使用一個轉換器,它返回NameAge通過\r\n分離。

+0

thx,我做了一個Grid。看看我的最後編輯 – Gero

相關問題