|
|
1 周之前 | |
|---|---|---|
| .. | ||
| PopoverWrapperExample.csproj | 1 周之前 | |
| Program.cs | 1 周之前 | |
| README.md | 1 周之前 | |
This example demonstrates how to use PopoverWrapper<TView> to make any View into a popover without implementing the IPopover interface.
PopoverWrapper<TView> is similar to RunnableWrapper<TView, TResult> but for popovers instead of runnables. It wraps any View and automatically handles:
.AsPopover() extension method for a clean, fluent syntax// Create any view
var myView = new View
{
X = Pos.Center (),
Y = Pos.Center (),
Width = 40,
Height = 10,
BorderStyle = LineStyle.Single
};
// Wrap it as a popover
PopoverWrapper<View> popover = myView.AsPopover ();
// Register and show
app.Popover.Register (popover);
app.Popover.Show (popover);
var listView = new ListView
{
Title = "Select an Item",
X = Pos.Center (),
Y = Pos.Center (),
Width = 30,
Height = 10,
Source = new ListWrapper<string> (["Apple", "Banana", "Cherry"])
};
PopoverWrapper<ListView> popover = listView.AsPopover ();
app.Popover.Register (popover);
app.Popover.Show (popover);
View CreateFormView ()
{
var form = new View
{
Title = "User Form",
X = Pos.Center (),
Y = Pos.Center (),
Width = 60,
Height = 16
};
// Add form fields...
return form;
}
View formView = CreateFormView ();
PopoverWrapper<View> popover = formView.AsPopover ();
app.Popover.Register (popover);
app.Popover.Show (popover);
| Feature | RunnableWrapper | PopoverWrapper |
|---|---|---|
| Purpose | Make any View runnable as a modal session | Make any View into a popover |
| Blocking | Yes, blocks until stopped | No, non-blocking overlay |
| Result Extraction | Yes, via typed Result property | N/A (access WrappedView directly) |
| Dismissal | Via RequestStop() or Quit command | Via Quit command or clicking outside |
| Focus | Takes exclusive focus | Shares focus with underlying content |
dotnet run --project Examples/PopoverWrapperExample
Terminal.Gui.App.PopoverBaseImplTerminal.Gui.App.IPopover