2014-01-13 47 views
1

我创建了一个窗口,用户可以选择一个目录,然后此目录中的所有文件都显示在列表框中。每个文件都显示一个复选框和文件名。DataTemplate通过MouseEnter加载工具提示

现在我想显示一个工具提示,如果该文件是“知道”图像文件。到目前为止,我所选择的路径都是加载所有工具提示。这工作正常。但是我有这个问题,如果目录中有很多图像,应用程序变得非常慢。

我在视图列表框中当前的代码如下所示:

<ListBox Grid.Row="1" ItemsSource="{Binding DirectoryItems, UpdateSourceTrigger=PropertyChanged}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <CheckBox Content="{Binding Path=FilePath, Converter={StaticResource directoryItemConverter}}" VerticalAlignment="Center" 
         VerticalContentAlignment="Center" ToolTip="{Binding Converter={StaticResource directoryItemToolTipConverter}}" 
         IsChecked="{Binding Upload, UpdateSourceTrigger=PropertyChanged}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

DirectoryItems是类型UploadFile的一个ObservableCollection。

的上传,文件类:

class UploadFile 
    { 
     public UploadFile(string filePath) 
     { 
      this.FilePath = filePath; 
      this.Upload = false; 
     } 

     public string FilePath { get; private set; } 
     public bool Upload { get; set; } 
    } 

的DirectoryItemToolTipConverter,这是在视图中使用的样子:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    UploadFile uploadFile = (UploadFile)value; 
    string extension = Path.GetExtension(uploadFile.FilePath); 
    if (extension != null && knownImageExtension.Contains(extension.ToLower())) 
    { 
     Bitmap bitmap = new Bitmap(System.Drawing.Image.FromFile(uploadFile.FilePath), previewImageSize, previewImageSize); 
     Image image = new Image 
     { 
      Source = ImageToImageSourceConverter.ConvertBitmap(bitmap), 
      Width = previewImageSize, 
      Height = previewImageSize 
     }; 
     return image; 
    } 
    return null; 
} 

我怎样才能做到这一点的工具提示目前装载,鼠标第一次进入复选框?有没有一种“简单”的方法来实现这一目标?

回答

0

这应该做的工作

<CheckBox Content="{Binding Path=FilePath, Converter={StaticResource directoryItemConverter}}" 
      VerticalAlignment="Center" VerticalContentAlignment="Center" 
      IsChecked="{Binding Upload, UpdateSourceTrigger=PropertyChanged}"> 
    <CheckBox.Triggers> 
     <EventTrigger RoutedEvent="MouseEnter"> 
      <BeginStoryboard> 
       <Storyboard Storyboard.TargetProperty="ToolTip"> 
        <ObjectAnimationUsingKeyFrames Duration="0:0:0"> 
         <DiscreteObjectKeyFrame Value="{Binding Converter={StaticResource directoryItemToolTipConverter}}" /> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </CheckBox.Triggers> 
</CheckBox> 
相关问题