Я хочу сделать аналог просмотра изображений как на Facebook. Когда вы нажимаете на изображение, и оно открывается во всплывающем окне. Основная проблема заключается в том, что источником со ссылкой на изображение является другой пользовательский элемент управления из коллекции.
Итак, у меня есть для этого пользовательский контроль с затемнением.
<Grid Background="#33000000" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid HorizontalAlignment="Center" VerticalAlignment="Center" Background="#FFFFFF" MinHeight="100" MinWidth="200">
<Grid.RowDefinitions>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="35"></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Background="#EEEEEE">
<Label Content="{Binding Title}" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
<Grid Grid.Row="1" Margin="10,20">
<Image Source="{Binding ImageURI}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</Grid>
<Grid Grid.Row="2" Background="#EEEEEE">
<Button Content="OK" Command="{Binding CloseCommand}" Width="80" Height="25" />
</Grid>
</Grid>
</Grid>
А также ВМ
public class PopupVM : ViewModelBase
{
private bool _isOpen;
public string ImageURI { get; set; }
public string Title { get; set; }
public bool IsOpen { get { return _isOpen; } set { _isOpen = value; RaisePropertyChanged("IsOpen"); } }
private void ClosePopup()
{
IsOpen = false;
}
public RelayCommand CloseCommand
{
get;
private set;
}
public PopupVM()
{
CloseCommand = new RelayCommand(() => ClosePopup());
}
}
Использование пользовательского контроля на странице
<local:PopupUserControl Visibility="{Binding popupVM_Instance.IsOpen, Converter={StaticResource BoolToVis}}" DataContext="{Binding popupVM_Instance}"/>
Модель для другого пользовательского контроля с источником изображения. Коллекция, которая привязана к ItemsControl
public class DialogMessageModel : ConversationModel
{
public ImageAttach Image { get; set; }
public bool HasImage => Image != null;
public bool HasMessage => Message != null;
public RelayCommand OpenImageCommand
{
get;
private set;
}
private void OpenImage()
{
TestVM.popupVM_Instance.ImageURI = Image.ImageURI;
TestVM.popupVM_Instance.IsOpen = true;
}
}
ВМ страницы имеют Instance of PopupVM для других элементов управления, которые могут получить доступ, чтобы открыть его
public static PopupVM popupVM_Instance { get; set; }
public TestVM()
{
popupVM_Instance = new PopupVM();
}
Открытие не работает. Его можно увидеть с самого начала. И не скрывать, если я нажимаю кнопку. Я тоже использую MVVMLight.