Files
Speckle.Material.Avalonia/Material.Dialog/Views/TextFieldDialog.axaml.cs
T
appleneko2001 db8a4e1eaf Merge remote-tracking branch 'origin/dev' into 3.0_major_update
# Conflicts:
#	Material.Avalonia/Material.Avalonia.csproj
#	Material.Colors/Material.Colors.csproj
#	Material.DataGrid/Material.DataGrid.csproj
#	Material.Demo/Material.Demo.csproj
#	Material.Dialog/Material.Dialog.csproj
#	Material.Dialog/Views/AlertDialog.axaml.cs
#	Material.Dialog/Views/CustomDialog.axaml.cs
#	Material.Dialog/Views/TextFieldDialog.axaml.cs
#	Material.Dialog/Views/TimePickerDialog.axaml.cs
#	Material.Ripple/Material.Ripple.csproj
#	Material.Styles/Material.Styles.csproj
2022-07-11 14:15:16 +09:00

97 lines
3.0 KiB
C#

using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Material.Dialog.Interfaces;
using Material.Dialog.ViewModels;
using System;
using Avalonia;
using Avalonia.Controls.Presenters;
using Avalonia.Threading;
namespace Material.Dialog.Views
{
public class TextFieldDialog : Window, IDialogWindowResult<TextFieldDialogResult>, IHasNegativeResult
{
public TextFieldDialogResult Result { get; set; }
public TextFieldDialog()
{
Result = new TextFieldDialogResult();
InitializeComponent();
#if DEBUG
this.AttachDevTools();
#endif
Closed += TextFieldDialog_Closed;
Opened += TextFieldDialog_Opened;
}
private void TextFieldDialog_Closed(object sender, EventArgs e)
{
Opened -= TextFieldDialog_Opened;
Closed -= TextFieldDialog_Closed;
}
private void TextFieldDialog_Opened(object sender, EventArgs e)
{
if (!(DataContext is TextFieldDialogViewModel vm))
return;
//vm.ButtonClick.RaiseCanExecute();
var fields = this.Find<ItemsControl>("PART_Fields");
Dispatcher.UIThread.InvokeAsync(delegate
{
if (fields is null)
return;
int index = 0;
foreach (var item in fields.ItemContainerGenerator.Containers)
{
var fieldViewModel = vm.TextFields[index];
if (item.ContainerControl is ContentPresenter presenter)
{
if (presenter.Child is TextBox field)
{
var classes = fieldViewModel.Classes;
if (classes != null)
{
foreach (var @class in classes.Split(' '))
{
if (@class != "")
field.Classes.Add(@class);
}
}
}
}
index++;
}
});
}
public TextFieldDialogResult GetResult()
{
if (!(DataContext is TextFieldDialogViewModel viewModel))
return null;
return viewModel.DialogResult switch
{
TextFieldDialogResult vm => vm,
// ReSharper disable once ConvertTypeCheckPatternToNullCheck
DialogResult basicViewModel => new TextFieldDialogResult(basicViewModel.GetResult,
Array.Empty<TextFieldResult>()),
_ => null
};
}
public void SetNegativeResult(DialogResult result) => Result.result = result.GetResult;
private void InitializeComponent() => AvaloniaXamlLoader.Load(this);
}
}