Co nowego dla platformy .NET 7 (Windows Forms .NET)
W tym artykule opisano niektóre nowe funkcje i ulepszenia systemu Windows Forms na platformie .NET 7.
Podczas migracji z programu .NET Framework do platformy .NET 7 należy pamiętać o kilku zmianach powodujących niezgodność. Aby uzyskać więcej informacji, zobacz Zmiany powodujące niezgodność w formularzach systemu Windows.
Ulepszenia wysokiej rozdzielczości DPI
Ulepszono renderowanie o wysokiej rozdzielczości PerMonitorV2 DPI:
Poprawnie skaluj zagnieżdżone kontrolki. Na przykład przycisk znajdujący się w panelu, który znajduje się na stronie karty.
Skaluj Form.MaximumSize i Form.MinimumSize właściwości na podstawie bieżących ustawień DPI monitora dla aplikacji, które są uruchamiane
ApplicationHighDpiMode
na wartośćPerMonitorV2
.W programie .NET 7 ta funkcja jest domyślnie wyłączona i musisz wyrazić zgodę na otrzymywanie tej zmiany. Począwszy od platformy .NET 8, ta funkcja jest domyślnie włączona i musisz zrezygnować z niej, aby powrócić do poprzedniego zachowania.
Aby włączyć funkcję, ustaw
configProperties
ustawienie w pliku runtimeconfig.json:{ "runtimeOptions": { "tfm": "net7.0", "frameworks": [ ... ], "configProperties": { "System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi": true, } } }
Ulepszenia i poprawki ułatwień dostępu
W tej wersji dodano dalsze ulepszenia ułatwień dostępu, w tym między innymi następujące elementy:
Rozwiązano wiele problemów związanych z ogłoszeniem obserwowanych w czytnikach zawartości ekranu, zapewniając poprawność informacji o kontrolkach. Na przykład ListView teraz poprawnie ogłasza, kiedy grupa jest rozwinięta lub zwinięta.
Więcej kontrolek zapewnia teraz obsługę automatyzacja interfejsu użytkownika:
Naprawiono przecieki pamięci związane z uruchamianiem aplikacji Windows Forms w narzędziach pomocniczych, takich jak Narrator.
Narzędzia pomocnicze dokładnie narysują wskaźniki fokusu i poprawną granicę raportu dla zagnieżdżonych formularzy oraz niektóre elementy kontrolek złożonych, takich jak DataGridView, ListViewi TabControl.
Wzorzec kontrolki ExpandCollapse interfejsu użytkownika automatyzacji został prawidłowo zaimplementowany w ListViewkontrolkach , TreeViewi PropertyGrid i aktywowany tylko dla elementów, które można rozszerzać.
Różne poprawki współczynnika kontrastu kolorów w kontrolkach.
Ulepszenia widoczności motywów ToolStripTextBox o wysokim kontraście i ToolStripButton w tych motywach.
Ulepszenia powiązań danych (wersja zapoznawcza)
Chociaż formularze systemu Windows mają już zaawansowany aparat powiązań, wprowadzana jest bardziej nowoczesna forma powiązania danych, podobna do powiązania danych dostarczonego przez WPF.
Nowe funkcje powiązania danych umożliwiają pełne wykorzystanie wzorca MVVM i użycie maperów relacyjnych obiektów z modelu ViewModels w formularzach systemu Windows łatwiejsze niż wcześniej. To z kolei umożliwia zmniejszenie liczby kodu w plikach związanych z kodem i otwarcie nowych możliwości testowania. Co ważniejsze, umożliwia udostępnianie kodu między formularzami systemu Windows i innymi platformami graficznymi .NET, takimi jak WPF, UWP/WinUI i .NET MAUI. I aby wyjaśnić często zadawane pytanie, nie ma żadnych planów wprowadzenia XAML w formularzach Windows Forms.
Te nowe funkcje powiązania danych są dostępne w wersji zapoznawczej dla platformy .NET 7, a więcej pracy nad tą funkcją nastąpi na platformie .NET 8.
Aby włączyć nowe powiązanie, dodaj EnablePreviewFeatures
ustawienie do pliku projektu. Jest to obsługiwane zarówno w językach C#, jak i Visual Basic.
<Project Sdk="Microsoft.NET.Sdk">
<!-- other settings -->
<PropertyGroup>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
</PropertyGroup>
</Project>
Poniższy fragment kodu przedstawia nowe właściwości, zdarzenia i metody dodane do różnych klas w formularzach Windows Forms. Mimo że poniższy przykład kodu znajduje się w języku C#, dotyczy również języka Visual Basic.
public class Control {
[BindableAttribute(true)]
public virtual object DataContext { get; set; }
[BrowsableAttribute(true)]
public event EventHandler DataContextChanged;
protected virtual void OnDataContextChanged(EventArgs e);
protected virtual void OnParentDataContextChanged(EventArgs e);
}
[RequiresPreviewFeaturesAttribute]
public abstract class BindableComponent : Component, IBindableComponent, IComponent, IDisposable {
protected BindableComponent();
public BindingContext? BindingContext { get; set; }
public ControlBindingsCollection DataBindings { get; }
public event EventHandler BindingContextChanged;
protected virtual void OnBindingContextChanged(EventArgs e);
}
public abstract class ButtonBase : Control {
[BindableAttribute(true)]
[RequiresPreviewFeaturesAttribute]
public ICommand? Command { get; set; }
[BindableAttribute(true)]
public object? CommandParameter { [RequiresPreviewFeaturesAttribute] get; [RequiresPreviewFeaturesAttribute] set; }
[RequiresPreviewFeaturesAttribute]
public event EventHandler? CommandCanExecuteChanged;
[RequiresPreviewFeaturesAttribute]
public event EventHandler? CommandChanged;
[RequiresPreviewFeaturesAttribute]
public event EventHandler? CommandParameterChanged;
[RequiresPreviewFeaturesAttribute]
protected virtual void OnCommandCanExecuteChanged(EventArgs e);
[RequiresPreviewFeaturesAttribute]
protected virtual void OnCommandChanged(EventArgs e);
[RequiresPreviewFeaturesAttribute]
protected virtual void OnCommandParameterChanged(EventArgs e);
[RequiresPreviewFeaturesAttribute]
protected virtual void OnRequestCommandExecute(EventArgs e);
}
public abstract class ToolStripItem : BindableComponent, IComponent, IDisposable, IDropTarget {
[BindableAttribute(true)]
[RequiresPreviewFeaturesAttribute]
public ICommand Command { get; set; }
[BindableAttribute(true)]
public object CommandParameter { [RequiresPreviewFeaturesAttribute] get; [RequiresPreviewFeaturesAttribute] set; }
[RequiresPreviewFeaturesAttribute]
public event EventHandler CommandCanExecuteChanged;
[RequiresPreviewFeaturesAttribute]
public event EventHandler CommandChanged;
[RequiresPreviewFeaturesAttribute]
public event EventHandler CommandParameterChanged;
[RequiresPreviewFeaturesAttribute]
protected virtual void OnCommandCanExecuteChanged(EventArgs e);
[RequiresPreviewFeaturesAttribute]
protected virtual void OnCommandChanged(EventArgs e);
[RequiresPreviewFeaturesAttribute]
protected virtual void OnCommandParameterChanged(EventArgs e);
[RequiresPreviewFeaturesAttribute]
protected virtual void OnRequestCommandExecute(EventArgs e);
}
Różne ulepszenia
Poniżej przedstawiono inne istotne zmiany:
- Obsługa przeciągania i upuszczania jest zgodna z funkcją przeciągania i upuszczania systemu Windows z bogatszymi efektami wyświetlania, takimi jak ikony i etykiety tekstu.
- Okna dialogowe folderów i plików umożliwiają uzyskanie większej liczby opcji:
- Dodaj do ostatnich
- Sprawdzanie dostępu do zapisu
- Tryb rozwinięty
- Ok wymaga interakcji
- Wybieranie tylko do odczytu
- Pokaż ukryte pliki
- Pokaż przypięte miejsca
- Pokaż podgląd
- ErrorProviderHasErrors ma teraz właściwość .
- Układ przyciągania formularza jest stały dla systemu Windows 11.
Zobacz też
.NET Desktop feedback