#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;
}
}
<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. Можно предложить подобное предупреждение, но в контексте фактического отсутствия предложений, которые отвечают на вопрос, это не особенно полезный ответ.