Usercontrol для полноразмерного изображения - PullRequest
0 голосов
/ 24 января 2019

Я хочу сделать аналог просмотра изображений как на 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...