тип ввода = кнопка показа файла

Как правило, ваш пользовательский интерфейс будет просто привязываться к свойствам вашей виртуальной машины:


Ваша виртуальная машина будет использовать BackgroundWorker для работы над фоновым потоком и для периодического обновления значения CurrentProgress. Что-то вроде этого:

public class MyViewModel : ViewModel
{
    private readonly BackgroundWorker worker;
    private readonly ICommand instigateWorkCommand;
    private int currentProgress;

    public MyViewModel()
    {
        this.instigateWorkCommand = 
                new DelegateCommand(o => this.worker.RunWorkerAsync(), 
                                    o => !this.worker.IsBusy);

        this.worker = new BackgroundWorker();
        this.worker.DoWork += this.DoWork;
        this.worker.ProgressChanged += this.ProgressChanged;
    }

    // your UI binds to this command in order to kick off the work
    public ICommand InstigateWorkCommand
    {
        get { return this.instigateWorkCommand; }
    }

    public int CurrentProgress
    {
        get { return this.currentProgress; }
        private set
        {
            if (this.currentProgress != value)
            {
                this.currentProgress = value;
                this.OnPropertyChanged(() => this.CurrentProgress);
            }
        }
    }

    private void DoWork(object sender, DoWorkEventArgs e)
    {
        // do time-consuming work here, calling ReportProgress as and when you can
    }

    private void ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        this.CurrentProgress = e.ProgressPercentage;
    }
}

144
задан Alex Peters 11 September 2018 в 15:51
поделиться

2 ответа

У меня действительно хакерское решение с этим ...

<style type="text/css"> 
    input[type="file"]
    { 
        width: 80px;        
    } 
</style>

<input id="File1" type="file" />

Проблема заключается в атрибуте ширины, который является скрытие текстового поля, очевидно, будет различаться в зависимости от браузера, в разных темах Windows XP и так далее.Может, с этим можно поработать? ...

3
ответ дан 23 November 2019 в 22:46
поделиться

Это будет очень сложно. Проблема с типом ввода файла заключается в том, что он обычно состоит из двух визуальных элементов, при этом рассматривается как один DOM-элемент. Добавьте к этому то, что несколько браузеров имеют свой собственный внешний вид для ввода файла, и вы готовы к кошмару. См. Статью на сайте quirksmode.org об особенностях ввода файла. Я гарантирую, что это не сделает вас счастливыми (я говорю по собственному опыту).

[РЕДАКТИРОВАТЬ]

На самом деле, я думаю, вам может сойти с рук помещение ввода в элемент контейнера (например, div) и добавление отрицательного поля к элементу. Эффективно скрывает часть текстового поля за пределами экрана. Другой вариант - использовать технику из статьи, на которую я ссылаюсь, попытаться оформить ее как кнопку.

15
ответ дан 23 November 2019 в 22:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: