diff --git a/.github/workflows/docs-verifier.yml b/.github/workflows/docs-verifier.yml new file mode 100644 index 0000000000..f1cf69e63d --- /dev/null +++ b/.github/workflows/docs-verifier.yml @@ -0,0 +1,29 @@ +name: MSDocs build verifier +on: pull_request + +permissions: + contents: read + +env: + GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + validate: + name: MSDocs build verifier + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + with: + egress-policy: audit + + - name: Checkout the repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Hide .github folder from validate + run: | + rm -rf "${{ github.workspace }}/.github" + + - name: Validate + uses: dotnet/docs-actions/actions/docs-verifier@5e8bcc78465d45a7544bba56509a1a69922b6a5a # main diff --git a/README.md b/README.md index b08a2b7df5..9d2c160aa3 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ This repository contains the conceptual documentation for .NET desktop technolog We have a large community using these resources. We make our best effort to respond to issues in a timely fashion. You can read more about our procedures for classifying and resolving issues in our [Issues policy](issues-policy.md) topic. -We welcome contributions to help us improve and complete the .NET docs. This is a very large repo, covering a large area. If this is your first visit, see our [labels and projects roadmap](styleguide/labels-projects.md) for help navigating the issues and projects in this repository. +We welcome contributions to help us improve and complete the .NET docs. ## Migrate old examples diff --git a/dotnet-desktop-guide/winforms/forms/events.md b/dotnet-desktop-guide/winforms/forms/events.md index 22f09ed454..c415f8fe0a 100644 --- a/dotnet-desktop-guide/winforms/forms/events.md +++ b/dotnet-desktop-guide/winforms/forms/events.md @@ -106,7 +106,7 @@ When you need to update UI controls from background threads within async operati # [.NET](#tab/dotnet) -.NET 9 introduced , which provides async-friendly marshaling to the UI thread. Unlike `Control.Invoke` which **sends** (blocks the calling thread), `Control.InvokeAsync` **posts** (non-blocking) to the UI thread's message queue. For more information about `Control.InvokeAsync`, see [How to make thread-safe calls to controls](../controls/how-to-make-thread-safe-calls.md#). +.NET 9 introduced , which provides async-friendly marshaling to the UI thread. Unlike `Control.Invoke` which **sends** (blocks the calling thread), `Control.InvokeAsync` **posts** (non-blocking) to the UI thread's message queue. For more information about `Control.InvokeAsync`, see [How to make thread-safe calls to controls](../controls/how-to-make-thread-safe-calls.md). **Key advantages of InvokeAsync:** diff --git a/dotnet-desktop-guide/wpf/advanced/annotations-overview.md b/dotnet-desktop-guide/wpf/advanced/annotations-overview.md index ef5e37bf27..e4753989b7 100644 --- a/dotnet-desktop-guide/wpf/advanced/annotations-overview.md +++ b/dotnet-desktop-guide/wpf/advanced/annotations-overview.md @@ -79,7 +79,7 @@ Another example scenario involves applications that enable the exchange of annot - - - [Annotations Schema](annotations-schema.md) -- [ContextMenu Overview](../controls/contextmenu-overview.md) +- [ContextMenu Overview](../controls/contextmenu.md) - [Commanding Overview](commanding-overview.md) - [Flow Document Overview](flow-document-overview.md) - [How to: Add a Command to a MenuItem](/previous-versions/dotnet/netframework-3.5/ms741839(v=vs.90)) diff --git a/dotnet-desktop-guide/wpf/advanced/hosting-win32-content-in-wpf.md b/dotnet-desktop-guide/wpf/advanced/hosting-win32-content-in-wpf.md index 56329b6dda..1db280a7f6 100644 --- a/dotnet-desktop-guide/wpf/advanced/hosting-win32-content-in-wpf.md +++ b/dotnet-desktop-guide/wpf/advanced/hosting-win32-content-in-wpf.md @@ -365,7 +365,7 @@ public partial class Window1 : Window { Which gives you: -![Screenshot of the WPF app running.](./media/hosting-win32-content-in-wpf/windows-presentation-foundation-application.png) +![Screenshot of the WPF app running.](./media/hosting-win32-content-in-wpf/windows-presentation-foundation-application.PNG) ## See also diff --git a/dotnet-desktop-guide/wpf/advanced/how-to-handle-the-contextmenuopening-event.md b/dotnet-desktop-guide/wpf/advanced/how-to-handle-the-contextmenuopening-event.md index 017aa3cb5e..c944ec1622 100644 --- a/dotnet-desktop-guide/wpf/advanced/how-to-handle-the-contextmenuopening-event.md +++ b/dotnet-desktop-guide/wpf/advanced/how-to-handle-the-contextmenuopening-event.md @@ -61,4 +61,4 @@ The final scenario, writing a handler that suppresses a menu totally, is uncommo - - - [Base Elements Overview](base-elements-overview.md) -- [ContextMenu Overview](../controls/contextmenu-overview.md) +- [ContextMenu Overview](../controls/contextmenu.md) diff --git a/dotnet-desktop-guide/wpf/advanced/how-to-use-a-thicknessconverter-object.md b/dotnet-desktop-guide/wpf/advanced/how-to-use-a-thicknessconverter-object.md index 3c03b45f20..cb23c1421c 100644 --- a/dotnet-desktop-guide/wpf/advanced/how-to-use-a-thicknessconverter-object.md +++ b/dotnet-desktop-guide/wpf/advanced/how-to-use-a-thicknessconverter-object.md @@ -32,4 +32,4 @@ This example does not run. - - [How to: Change the Margin Property](/previous-versions/dotnet/netframework-3.5/ms750561(v=vs.90)) - [How to: Convert a ListBoxItem to a new Data Type](/previous-versions/dotnet/netframework-3.5/ms749147(v=vs.90)) -- [Panels Overview](../controls/panels-overview.md) +- [Panels Overview](../controls/panel.md) diff --git a/dotnet-desktop-guide/wpf/advanced/layout.md b/dotnet-desktop-guide/wpf/advanced/layout.md index 19aedbd0f6..708ed3331c 100644 --- a/dotnet-desktop-guide/wpf/advanced/layout.md +++ b/dotnet-desktop-guide/wpf/advanced/layout.md @@ -159,12 +159,12 @@ Layout rounding is disabled by default. To enable layout rounding, set the elements, see [Panels Overview](../controls/panels-overview.md). To better understand the various positioning properties that can affect layout, see [Alignment, Margins, and Padding Overview](alignment-margins-and-padding-overview.md). When you are ready to put it all together in a lightweight application, see [Walkthrough: My first WPF desktop application](../get-started/walkthrough-my-first-wpf-desktop-application.md). +Understanding how elements are measured and arranged is the first step in understanding layout. For more information about the available elements, see [Panels Overview](../controls/panel.md). To better understand the various positioning properties that can affect layout, see [Alignment, Margins, and Padding Overview](alignment-margins-and-padding-overview.md). When you are ready to put it all together in a lightweight application, see [Walkthrough: My first WPF desktop application](../get-started/walkthrough-my-first-wpf-desktop-application.md). ## See also - - -- [Panels Overview](../controls/panels-overview.md) +- [Panels Overview](../controls/panel.md) - [Alignment, Margins, and Padding Overview](alignment-margins-and-padding-overview.md) - [Layout and Design](optimizing-performance-layout-and-design.md) diff --git a/dotnet-desktop-guide/wpf/advanced/optimizing-performance-layout-and-design.md b/dotnet-desktop-guide/wpf/advanced/optimizing-performance-layout-and-design.md index 492ac26b85..427ed8b12c 100644 --- a/dotnet-desktop-guide/wpf/advanced/optimizing-performance-layout-and-design.md +++ b/dotnet-desktop-guide/wpf/advanced/optimizing-performance-layout-and-design.md @@ -49,7 +49,7 @@ The layout pass process is invoked again if any of the following actions occur: The complexity of the layout process is directly based on the layout behavior of the -derived elements you use. For example, a or control provides much more functionality than a control. The price for this greater increase in functionality is a greater increase in performance costs. However, if you do not require the functionality that a control provides, you should use the less costly alternatives, such as a or a custom panel. -For more information, see [Panels Overview](../controls/panels-overview.md). +For more information, see [Panels Overview](../controls/panel.md). ### Update Rather than Replace a RenderTransform diff --git a/dotnet-desktop-guide/wpf/advanced/use-automatic-layout-overview.md b/dotnet-desktop-guide/wpf/advanced/use-automatic-layout-overview.md index 9806c6f680..d8e999db0c 100644 --- a/dotnet-desktop-guide/wpf/advanced/use-automatic-layout-overview.md +++ b/dotnet-desktop-guide/wpf/advanced/use-automatic-layout-overview.md @@ -57,7 +57,7 @@ Using the automatic layout approach requires a set of coding and design standard - Use , , and to position controls. -For a discussion about various types of panels, see [Panels Overview](../controls/panels-overview.md). +For a discussion about various types of panels, see [Panels Overview](../controls/panel.md). **Do not set a fixed size for a window** diff --git a/dotnet-desktop-guide/wpf/controls/gridview.md b/dotnet-desktop-guide/wpf/controls/gridview.md index a57b1f5399..dd30a8d004 100644 --- a/dotnet-desktop-guide/wpf/controls/gridview.md +++ b/dotnet-desktop-guide/wpf/controls/gridview.md @@ -49,7 +49,7 @@ When defining the data field to display in a , define a . Do not use the and properties for content that is displayed by using a . -To specify template and style properties for column headers, use the , , and classes. For more information, see [GridView Column Header Styles and Templates Overview](gridview-column-header-styles-and-templates-overview.md). +To specify template and style properties for column headers, use the , , and classes. For more information, see [GridView Column Header Styles and Templates Overview](gridview.md). diff --git a/dotnet-desktop-guide/wpf/controls/how-to-build-a-standard-ui-dialog-box-by-using-grid.md b/dotnet-desktop-guide/wpf/controls/how-to-build-a-standard-ui-dialog-box-by-using-grid.md index 9abdbeb4c3..2ffcff79e6 100644 --- a/dotnet-desktop-guide/wpf/controls/how-to-build-a-standard-ui-dialog-box-by-using-grid.md +++ b/dotnet-desktop-guide/wpf/controls/how-to-build-a-standard-ui-dialog-box-by-using-grid.md @@ -36,4 +36,4 @@ Finally, the example adds three elements t - - - [Panel](panel.md) -- [How-to Topics](grid-how-to-topics.md) +- [How-to Topics](grid.md) diff --git a/dotnet-desktop-guide/wpf/controls/how-to-create-an-expander-with-a-scrollviewer.md b/dotnet-desktop-guide/wpf/controls/how-to-create-an-expander-with-a-scrollviewer.md index 95ae7a09e6..66f08169e1 100644 --- a/dotnet-desktop-guide/wpf/controls/how-to-create-an-expander-with-a-scrollviewer.md +++ b/dotnet-desktop-guide/wpf/controls/how-to-create-an-expander-with-a-scrollviewer.md @@ -28,5 +28,4 @@ Note that the example sets the ## See also - -- [Expander Overview](expander-overview.md) -- [How-to Topics](expander-how-to-topics.md) +- [Expander Overview](expander.md) diff --git a/dotnet-desktop-guide/wpf/controls/how-to-customize-the-thumb-size-on-a-scrollbar.md b/dotnet-desktop-guide/wpf/controls/how-to-customize-the-thumb-size-on-a-scrollbar.md index 98ffd443bf..03ee1fc155 100644 --- a/dotnet-desktop-guide/wpf/controls/how-to-customize-the-thumb-size-on-a-scrollbar.md +++ b/dotnet-desktop-guide/wpf/controls/how-to-customize-the-thumb-size-on-a-scrollbar.md @@ -29,4 +29,4 @@ The following example creates a