LowDown: я пытаюсь создать Средство просмотра документов в WPF. Это позволит пользователю предварительно просмотреть выбранные документы и, если они захотят, сравнить документы в WPF. Чтобы они могли видеть их рядом.
Схема такая: Левая сторона - это полный список. Справа находится элемент управления Коллекция или Предметы. Внутри элемента управления будет набор «выбранных документов» в списке. Таким образом, пользователь может выбрать несколько элементов в списке и для каждого нового элемента, который он выбирает, он может добавить элемент в коллекцию справа. Я хочу, чтобы коллекция выглядела как галерея изображений, которая отображается в поиске картинок Google / Bing. Имеет смысл?
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу заставить WPFPreviewer правильно связываться с выбранным элементом в списке в списке элементов
Примечание: WPFPreviewer - это то, что выдает Micorosft, что позволяет нам просматривать документы. Для всех типов документов могут быть созданы другие средства предварительного просмотра, но я собираюсь начать с базового, пока я не разберусь в этом.
Я успешно связался со списком БЕЗ элементов управления здесь:
<Window.Resources>
<DataTemplate x:Key="listBoxTemplate">
<StackPanel Margin="3" >
<DockPanel >
<Image Source="{Binding IconURL}" Height="30"></Image>
<TextBlock Text=" " />
<TextBlock x:Name="Title" Text="{Binding Title}"
FontWeight="Bold" />
<TextBlock x:Name="URL" Visibility="Collapsed"
Text="{Binding Url}"/>
</DockPanel>
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid Background="Cyan">
<ListBox HorizontalAlignment="Left"
ItemTemplate="{StaticResource listBoxTemplate}" Width="200"
AllowDrop="True" x:Name="lbDocuments"
ItemsSource="{Binding Path=DocumentElements,ElementName=winDocument}"
DragEnter="documentListBox_DragEnter" />
<l:WPFPreviewHandler
Content="{Binding ElementName=lbDocuments, Path=SelectedItem.Url}"/>
</Grid>
Хотя, когда я добавляю ItemsControl, я больше не могу заставить его работать:
<Window.Resources>
<DataTemplate x:Key="listBoxTemplate">
<StackPanel Margin="3" >
<DockPanel >
<Image Source="{Binding IconURL}" Height="30"></Image>
<TextBlock Text=" " />
<TextBlock x:Name="Title" Text="{Binding Title}" FontWeight="Bold" />
<TextBlock x:Name="URL" Visibility="Collapsed" Text="{Binding Url}"/>
</DockPanel>
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox HorizontalAlignment="Left"
ItemTemplate="{StaticResource listBoxTemplate}" Width="200"
AllowDrop="True" x:Name="lbDocuments"
ItemsSource="{Binding Path=DocumentElements,ElementName=winDocument}"
DragEnter="documentListBox_DragEnter" />
<ItemsControl x:Name="DocumentViewer"
ItemsSource="{Binding ElementName=lbDocuments, Path=SelectedItem.Url}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Background="Cyan">
<l:WPFPreviewHandler Content="{Binding Url}"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
Вот класс, который загружается в ListBox
public class Document
{
public string Title { get; set; }
public string Url { get; set; } //this is what I want
public string IconURL { get; set; } //used so I can display the icon of the file
}
Может кто-нибудь помочь мне с попыткой привязки к ItemsControl, если я выберу один или даже несколько элементов в списке.