Есть ли какие-либо Blazor timepicker и ColorPicker?

#blazor #blazor-webassembly

#blazor #blazor-webassembly

Вопрос:

Есть ли какие-либо средства выбора времени и цвета Блейзора? Я ищу средство выбора цвета и времени в blazor, которое поддерживает большинство браузеров с единообразным поведением. Я нахожу только HTML-элемент управления, который не является одинаковым для всех браузеров.

Комментарии:

1. Blazor использует те же веб-элементы управления, что и другие сайты, поскольку он все еще может запускать обычные элементы управления HTML и библиотеки javascript, вы можете найти любую библиотеку javascript и использовать ее с помощью blazor, используя IJSRuntime

2. Я думаю, что Microsoft намеренно не добавила слишком много компонентов по умолчанию в библиотеку: теперь вы видите, что для компонентов Blazor появилась новая торговая площадка. Вы всегда можете использовать такие вещи, как <input type="color"... , но это выглядит не очень красиво.

Ответ №1:

Я создал компонент для использования на сервере Blazor для выбора цвета. Он использует тип ввода HTML color.

 <input type="color" id="head" name="head" value="@InColor" @onchange="@UpdateIt">
<label for="head">@InColor</label>

@code {
    [Parameter]
    public string InColor { get; set; }
    [Parameter]
    public EventCallback<string> ReturnedColor { get; set; }

    private void UpdateIt(ChangeEventArgs e)
    {
        InColor = e.Value.ToString();
        ReturnedColor.InvokeAsync(InColor);
    }

}

  

Для использования все, что вам нужно сделать, это создать новый компонент blazor и вставить весь код. Например, я создал ColorSelector.razor файл, и для использования в моем проекте было бы:

 <ColorSelector InColor="@MyColor" ReturnedColor="ColorChange"></ColorSelector>
...
@code
{
    private void ColorChange(string e)
    {
        MyColor = e;
        StateHasChanged();
    }
}
  

Вы могли бы сделать то же самое для DatePicker или других уже определенных компонентов HTML.

Комментарии:

1. Я создал представителя github с образцом проекта для выбора цвета: ссылка

2. Я скорректировал ваше решение с помощью нового ответа, если вы не согласны, я удалю его!

Ответ №2:

 Install-Package BlazorColorPicker
  

добавить раздел скрипта в index.html или _Host.cshtml (раздел head)

 <link href="_content/BlazorColorPicker/colorpicker.css" rel="stylesheet" />
<script src="_content/BlazorColorPicker/colorpicker.js"></script>
  

Использование

 @page "/"

@using BlazorColorPicker
<button class="btn btn-primary" @onclick="OpenModal">
    <div style="background-color:@color" class="buttonColor"></div> Select a Color
</button>

<ColorPicker Title="My Blazor ColorPicker" IsOpened="isOpened" Closed="ClosedEvent" MyColor="@color">
</ColorPicker>

@code {
    bool isOpened = false;
    string color = "#F1F7E9";

    void OpenModal()
    {
        isOpened = true;
    }

    void ClosedEvent(string value)
    {
        color = value;
        isOpened = false;
    }
}
  

Проект

Или radzen

 <RadzenColorPicker @bind-Value=@color ShowHSV=@showHSV ShowRGBA=@showRGBA 
ShowColors=@showColors ShowButton=@showButton Change=@OnChange />


void OnChange(string value)
{
    console.Log($"Value changed to: {value}");
}
  

Ответ №3:

Я настрою код @Mariano на встроенный blazor InputText , и таким образом вы будете выполнять двустороннюю привязку данных, и при нажатии кнопки отправки ваши EditForm изменения будут зафиксированы:
ColorSelector.razor

 <InputText type="color" id="head" name="head"
Value="@InColor"
ValueExpression="@(() => InColor)"
ValueChanged="@((string value) => UpdateIt(value))" />

@code {
    [Parameter]
    public string InColor { get; set; }
    [Parameter]
    public EventCallback<string> ReturnedColor { get; set; }

    private void UpdateIt(string value)
    {
        InColor = value;
        ReturnedColor.InvokeAsync(InColor);
    }

}
  

Тогда вы можете использовать его следующим образом:

 <ColorSelector InColor="@MyColor" ReturnedColor="ColorChange"></ColorSelector>
...
@code
{
    private void ColorChange(string e)
    {
        MyColor = e;
        StateHasChanged();
    }
}
  

Ответ №4:

Использование привязки значения — это изменение значения, обрабатываемое привязкой.

Разметка компонентов:

 <input type="color" @bind-value="@ColorHexCode"/>
  

Код компонента:

 public partial class ColorPicker : ComponentBase
{
    private string m_ColorHexCode;

    [Parameter]
    public string ColorHexCode
    {
        get => m_ColorHexCode;
        set
        {
            if (m_ColorHexCode == value) return;

            m_ColorHexCode = value;

            ColorHexCodeChanged.InvokeAsync(m_ColorHexCode);
        }
    }

    [Parameter]
    public EventCallback<string> ColorHexCodeChanged { get; set; }
}
  

Использование компонентов:

 <ColorPicker @bind-ColorHexCode="@ColorCode"/>
  

Ответ №5:

Вот проект, который показывает, как можно создать простой инструмент выбора времени:

https://github.com/pekspro/BlazorTimePicker

Затем вы могли бы использовать средство выбора времени следующим образом:

 <Pekspro.Blazor.TimePicker.TimePickerComponent @bind-SecondOfDay="SecondOfDay" />
  

В том же проекте также есть компонент date, объединяющий средство выбора времени с средством выбора даты, которое вы легко можете привязать к дате и времени:

 <Pekspro.Blazor.TimePicker.DateTimePickerComponent @bind-DateAndTime="SelectedDateTime" />
  

Ответ №6:

Как упоминал Umair, вы можете использовать любую библиотеку javascript в приложении blazor. Насколько я знаю, в пакете blazor нет никаких элементов управления по умолчанию, которые вы упомянули. Для выбора времени я бы порекомендовал что-нибудь из мира javascript, или вы можете использовать что-нибудь из библиотеки MatBlazor — для выбора времени вы могли бы использовать DatePicker с дополнительным временем для выбора. Для получения дополнительной информации о MatBlazor см. Это

Комментарии:

1. Это вопрос Блейзора. Хотя Blazor может использовать компоненты JS, это противоречит целям проектирования Blazor, а именно избегать написания JS, где это возможно. Поэтому рекомендация OP использовать компонент JS не является полезным ответом.

Ответ №7:

Я был бы осторожен с пользовательскими элементами управления. Предполагается, что браузеры на некоторых устройствах, особенно на телефонах, должны иметь возможность обрабатывать элементы управления html, как, однако, хотите. Например, пользователь iPhone может привыкнуть вводить цвет с помощью определенного элемента управления, и ему может не понравиться, что вы переопределяете значение по умолчанию.

Комментарии:

1. Это не полезный ответ. В OP не упоминались пользовательские элементы управления, только компоненты Blazor, которые реализуют средства выбора даты / времени, поэтому нет причин думать, что они собираются создавать или использовать пользовательские или нестандартные элементы управления. Blazor в любом случае использует стандартные элементы управления HTML. Можно предложить подобное предупреждение, но в контексте фактического отсутствия предложений, которые отвечают на вопрос, это не особенно полезный ответ.