2015-02-05 2 views
0

У меня есть некоторые изображения в ListBox. Когда пользователь нажимает на одно изображение, я хотел бы открыть новое окно (ImageWindow) и показать щелкнув изображение в новом окне. Я добавил уже новый XAML-файл и обработчик событий. Это то, что я получил:Пропустить изображение в новом окне в WPF/C#

MainWindow:

<ListBox Name="MainListBox"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <DockPanel HorizontalAlignment="Center"> 
       <Image Source="{Binding}" MouseDown="Image_MouseDown"></Image> 
      </DockPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

/*========================================================================*/ 

private void Image_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    ImageWindow imageWindow = new ImageWindow(); 
    //Pass image 
    imageWindow.Show(); 
} 

ImageWindow:

<ListBox Name="ImageListBox"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <DockPanel HorizontalAlignment="Center"> 
       <Image Source="{Binding}"></Image> 
      </DockPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Как передать Clicked изображение?

См example (нажмите на изображение)

ответ

1

Просто скопировать, прошлый и настроить этот код, так что он соответствует вашему: имени переменной

private void ListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e) //Varname 
    { 

     ImageWindow imageWindow = new ImageWindow { Owner = this }; 
     foreach (var item in ListBox.Items) //Varname 
     { 
      imageWindow.ListBox.Items.Add(item);//Varname 
     } 

     imageWindow.SetSelectedImageIndex = ListBox.SelectedIndex; //Varname + save the index of the selected item and pass it to ImageWindow 
     imageWindow.Show(); 
    } 

ImageWindow:

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    Application.Current.MainWindow.WindowState = WindowState.Normal; 
    ListBoxItem lbi = (ListBoxItem)ImageListBox.ItemContainerGenerator.ContainerFromIndex(SetSelectedImageIndex); //Get with the index the befor selected item 
    lbi.Focus(); //Set the focus on it 
} 
0

Вы можете начать с чем-то вроде этого:

<Grid 
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"> 

    <Popup x:Name="popup" PlacementTarget="{Binding ElementName=imageList}"> 
     <Image Source="{Binding PlacementTarget.SelectedItem , ElementName=popup}"/> 
    </Popup> 
    <ListView x:Name="imageList" > 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="SelectionChanged"> 
       <ei:ChangePropertyAction PropertyName="IsOpen" 
        TargetName="{Binding ElementName=popup}" Value="True"/> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
    </ListView> 
</Grid> 

Добавить ссылки на Microsoft.Expression.Interactions и к System.Windows.Interactivity чтобы заставить его работать.

Смежные вопросы