Dreamine.UI.Maui
1.0.1
Windows(WinUI)의 네이티브 `CheckBox`는 `WidthRequest`로 줄일 수 없는 거대한 최소 너비를 가져서 라벨과의 간격이 벌어지는 문제가 있어, 처음부터 직접 그려서 만들었습니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
DreamineMessageBoxPage.xaml.cs
이 파일의 문서화 페이지로 가기
1
namespace
Dreamine.UI.Maui.Popup
;
2
19
public
partial class
DreamineMessageBoxPage
: ContentPage
20
{
29
private
readonly TaskCompletionSource<DreamineDialogResult>
_tcs
=
new
();
38
private
IDispatcherTimer?
_autoClickTimer
;
47
private
int
_autoClickRemainingSeconds
;
56
private
DreamineDialogResult
_autoClickResult
;
65
private
string
_baseMessage
=
string
.Empty;
66
75
public
Task<DreamineDialogResult>
ResultTask
=>
_tcs
.Task;
76
133
public
DreamineMessageBoxPage
(
134
string
title,
135
string
message,
136
IReadOnlyList<(
DreamineDialogResult
Result,
string
Text)> buttons,
137
DreamineDialogResult
autoClick =
DreamineDialogResult
.None,
138
int
autoClickDelaySeconds = 0)
139
{
140
InitializeComponent();
141
142
TitleLabel.Text = title;
143
MessageLabel.Text = message;
144
_autoClickResult
= autoClick;
145
146
foreach
(var (result, text) in buttons)
147
{
148
var button =
new
Button
149
{
150
Text = text,
151
BackgroundColor = Color.FromArgb(
"#0D1B3E"
),
152
TextColor = Colors.White,
153
CornerRadius = 6,
154
WidthRequest = 90,
155
HeightRequest = 36
156
};
157
button.Clicked += (_, _) =>
Complete
(result);
158
ButtonRow.Children.Add(button);
159
}
160
161
if
(autoClickDelaySeconds > 0 && autoClick !=
DreamineDialogResult
.None)
162
{
163
_autoClickRemainingSeconds
= autoClickDelaySeconds;
164
_baseMessage
= message;
165
UpdateCountdownText
();
166
167
_autoClickTimer
= Dispatcher.CreateTimer();
168
_autoClickTimer.Interval = TimeSpan.FromSeconds(1);
169
_autoClickTimer.Tick += (_, _) =>
170
{
171
_autoClickRemainingSeconds
--;
172
if
(
_autoClickRemainingSeconds
<= 0)
173
{
174
_autoClickTimer
?.Stop();
175
Complete
(
_autoClickResult
);
176
}
177
else
178
{
179
UpdateCountdownText
();
180
}
181
};
182
_autoClickTimer
.Start();
183
}
184
}
185
194
private
void
UpdateCountdownText
()
195
=> MessageLabel.Text = $
"{_baseMessage}\n\n({_autoClickRemainingSeconds}초 후 자동으로 닫힙니다)"
;
196
213
private
void
Complete
(
DreamineDialogResult
result)
214
{
215
_autoClickTimer
?.Stop();
216
if
(!
_tcs
.Task.IsCompleted)
217
_tcs
.SetResult(result);
218
219
Navigation.PopModalAsync(animated:
false
);
220
}
221
}
Dreamine.UI.Maui.Popup
Definition
BlinkPopupOptions.cs:1
Dreamine.UI.Maui.Popup.DreamineDialogResult
DreamineDialogResult
Definition
DreamineDialogResult.cs:12
Dreamine.UI.Maui.Popup.DreamineMessageBoxPage.ResultTask
Task< DreamineDialogResult > ResultTask
Definition
DreamineMessageBoxPage.xaml.cs:75
Dreamine.UI.Maui.Popup.DreamineMessageBoxPage._tcs
readonly TaskCompletionSource< DreamineDialogResult > _tcs
Definition
DreamineMessageBoxPage.xaml.cs:29
Dreamine.UI.Maui.Popup.DreamineMessageBoxPage._autoClickTimer
IDispatcherTimer? _autoClickTimer
Definition
DreamineMessageBoxPage.xaml.cs:38
Dreamine.UI.Maui.Popup.DreamineMessageBoxPage._baseMessage
string _baseMessage
Definition
DreamineMessageBoxPage.xaml.cs:65
Dreamine.UI.Maui.Popup.DreamineMessageBoxPage.Complete
void Complete(DreamineDialogResult result)
Definition
DreamineMessageBoxPage.xaml.cs:213
Dreamine.UI.Maui.Popup.DreamineMessageBoxPage.DreamineMessageBoxPage
DreamineMessageBoxPage(string title, string message, IReadOnlyList<(DreamineDialogResult Result, string Text)> buttons, DreamineDialogResult autoClick=DreamineDialogResult.None, int autoClickDelaySeconds=0)
Definition
DreamineMessageBoxPage.xaml.cs:133
Dreamine.UI.Maui.Popup.DreamineMessageBoxPage._autoClickRemainingSeconds
int _autoClickRemainingSeconds
Definition
DreamineMessageBoxPage.xaml.cs:47
Dreamine.UI.Maui.Popup.DreamineMessageBoxPage._autoClickResult
DreamineDialogResult _autoClickResult
Definition
DreamineMessageBoxPage.xaml.cs:56
Dreamine.UI.Maui.Popup.DreamineMessageBoxPage.UpdateCountdownText
void UpdateCountdownText()
Definition
DreamineMessageBoxPage.xaml.cs:194
Popup
DreamineMessageBoxPage.xaml.cs
다음에 의해 생성됨 :
1.17.0