Skip to content

Commit aa0d7a1

Browse files
committed
Merge branch 'release/v23.1.3' into main
2 parents 04fb9e0 + 0b98630 commit aa0d7a1

File tree

35 files changed

+1278
-47
lines changed

35 files changed

+1278
-47
lines changed

Documentation/topics/bars/localization.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Many controls utilize built-in strings as part of their presentation, and these
1414
Bars string resources are customized using the [ActiproSoftware.Products.Bars.SR](xref:ActiproSoftware.Products.Bars.SR) class and an enumeration of available resource names is available using [ActiproSoftware.Products.Bars.SRName](xref:ActiproSoftware.Products.Bars.SRName).
1515

1616
> [!NOTE]
17-
> For those working with [MVVM](mvvm-support.md), additional string resources for that library can be customized using the [ActiproSoftware.Products.Bars.Mvvm.SR](xref:ActiproSoftware.Products.Bars.Mvvm.SR) class and [ActiproSoftware.Products.Bars.MVVM.SRName](xref:ActiproSoftware.Products.Bars.MVVM.SRName) enumeration.
17+
> For those working with [MVVM](mvvm-support.md), additional string resources for that library can be customized using the `ActiproSoftware.Products.Bars.Mvvm.SR` class and `ActiproSoftware.Products.Bars.MVVM.SRName` enumeration.
1818
1919
The following example demonstrates how one might customize the `UIRibbonMenuItemAlwaysShowRibbonText` string resource:
2020

Documentation/topics/conversion/converting-to-v20-1.md

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@ This list contains changes and removals only:
397397
- `MenuSeparatorHighlightNormalBrushKey` property removed due to template simplification.
398398
- `NavigationBarPopupButtonBackground*BrushKey` properties removed since they are no longer used.
399399
- `RaftingWindowBorderActiveBrushKey`, `RaftingWindowBorderInactiveBrushKey`, and `RaftingWindowBorderNormalCornerRadiusKey` properties removed since they are no longer used.
400+
- `RibbonGroupBackgroundPressedBrushKey`, `RibbonGroupBorderHoverBrushKey`, `RibbonGroupSeparatorOpacityMaskNormalBrushKey` properties removed since they are no longer used.
400401
- `RibbonSeparatorBorderNormalBrushKey`, `RibbonSeparatorBorderNormalThicknessKey`, and `RibbonSeparatorOpacityMaskNormalBrushKey ` properties removed since they are no longer used.
401402
- `RibbonTabItemBackgroundFocusedBrushKey`, `RibbonTabItemBackgroundSelectedBrushKey`, `RibbonTabItemBorderFocusedBrushKey`, `RibbonTabItemBorderHoverBrushKey`, `RibbonTabItemForegroundSelectedBrushKey`, `RibbonTabItemInnerBorderFocusedBrushKey`, RibbonTabItemInnerBorderHoverBrushKey properties removed since they are no longer used.
402403
- `RibbonToolBarTrayInnerBorderNormalBrushKey` property removed since it is no longer used.
@@ -491,10 +492,6 @@ This list contains changes and removals only:
491492

492493
- `AreEffectsEnabled`, `MaxTitleAreaWidth`, `OuterGlowBrush`, `UseColors` properties removed since contextual tab groups no longer render UI in the title bar.
493494

494-
### Group (Ribbon product)
495-
496-
- `RibbonGroupBackgroundPressedBrushKey`, `RibbonGroupBorderHoverBrushKey`, `RibbonGroupSeparatorOpacityMaskNormalBrushKey` properties removed since they are no longer needed.
497-
498495
### QuickAccessToolBar (Ribbon product)
499496

500497
- `IsApplicationButtonVisible`, `IsItemOuterGlowEnabled` properties removed since they are no longer needed.

Documentation/topics/gauge/circular-gauge-features/pointers.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ Pointer values can be interctively changed, by the end-user, using the mouse whe
139139
140140
By default, the pointer is not animated when the value is changed using the mouse. This behavior can be altered by setting [IsDraggingAnimated](xref:@ActiproUIRoot.Controls.Gauge.Primitives.PointerBase.IsDraggingAnimated) to `true`.
141141

142+
If you wish for a left mouse down event anywhere in the gauge to trigger a pointer drag, set the pointer's [CanDrag](xref:@ActiproUIRoot.Controls.Gauge.Primitives.PointerBase.CanDrag) property to `true` and handle the gauge's `LeftMouseButtonDown` event. In the event handler, invoke the pointer's [StartDrag](xref:@ActiproUIRoot.Controls.Gauge.Primitives.PointerBase.StartDrag*) method, passing in the event arguments sent to the event handler.
143+
142144
## Scale Placement
143145

144146
Bar and marker pointers are positioned relative to the scale bar defined by the associated [CircularScale](xref:@ActiproUIRoot.Controls.Gauge.CircularScale) element. By default, these pointers will be overlayed and centered on the scale bar. The placement of these pointers can be altered using the [ScalePlacement](xref:@ActiproUIRoot.Controls.Gauge.Primitives.PointerBase.ScalePlacement) and [ScaleOffset](xref:@ActiproUIRoot.Controls.Gauge.Primitives.PointerBase.ScaleOffset) properties.

Documentation/topics/gauge/linear-gauge-features/pointers.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ Pointer values can be interactively changed, by the end-user, using the mouse wh
9393
9494
By default, the pointer is not animated when the value is changed using the mouse. This behavior can be altered by setting [IsDraggingAnimated](xref:@ActiproUIRoot.Controls.Gauge.Primitives.PointerBase.IsDraggingAnimated) to `true`.
9595

96+
If you wish for a left mouse down event anywhere in the gauge to trigger a pointer drag, set the pointer's [CanDrag](xref:@ActiproUIRoot.Controls.Gauge.Primitives.PointerBase.CanDrag) property to `true` and handle the gauge's `LeftMouseButtonDown` event. In the event handler, invoke the pointer's [StartDrag](xref:@ActiproUIRoot.Controls.Gauge.Primitives.PointerBase.StartDrag*) method, passing in the event arguments sent to the event handler.
97+
9698
## Scale Placement
9799

98100
Bar and marker pointers are positioned relative to the scale bar defined by the associated [LinearScale](xref:@ActiproUIRoot.Controls.Gauge.LinearScale) element. By default, these pointers will be overlayed and centered on the scale bar. The placement of these pointers can be altered using the [ScalePlacement](xref:@ActiproUIRoot.Controls.Gauge.Primitives.PointerBase.ScalePlacement) and [ScaleOffset](xref:@ActiproUIRoot.Controls.Gauge.Primitives.PointerBase.ScaleOffset) properties.

Documentation/topics/licensing.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ The contents of a *licenses.licx* file are pretty simple. It needs a single lin
144144
This single line (update the version to match the one you use) should be added to the *licenses.licx* file in any project that uses Actipro @@PlatformName control or SyntaxEditor add-on products:
145145

146146
```
147-
ActiproSoftware.Products.ActiproLicenseToken, ActiproSoftware.Shared.Wpf, Version=23.1.2.0, Culture=neutral, PublicKeyToken=36ff2196ab5654b9
147+
ActiproSoftware.Products.ActiproLicenseToken, ActiproSoftware.Shared.Wpf, Version=23.1.3.0, Culture=neutral, PublicKeyToken=36ff2196ab5654b9
148148
```
149149

150150
### Notes on Build Machines When Using Licenses.licx Files

Documentation/topics/recent-updates.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ WPF Studio's documentation has frequent updates, so this topic is the best place
99

1010
If you are looking for a list of recently added major new features to WPF Studio products, please see the Sample Browser's Recent Updates page instead.
1111

12+
## Updates for v23.1.3
13+
14+
- **SyntaxEditor:** Added the [Overlay Panes](syntaxeditor/user-interface/editor-view/overlay-panes.md) topic for developing custom overlay panes.
15+
1216
## Updates for v23.1.0
1317

1418
- **Bars:** Added [documentation](bars/index.md) for the new product.

Documentation/topics/shared/windows-controls/dynamicimage.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ The [DynamicImage](xref:@ActiproUIRoot.Controls.DynamicImage) class has these im
3737
| `IsEnabled` Property | When set to `false`, the image content will be rendered in grayscale. Inherited from `Image`. |
3838
| `Source` Property | The `ImageSource` for the image content. Inherited from `Image`. |
3939
| [UseMonochrome](xref:@ActiproUIRoot.Controls.DynamicImage.UseMonochrome) Property | Whether the `ImageSource` value in the `Source` property should be rendered as monochrome. The default value is `false`. When this property is `true`, the resulting monochrome image will be in the control's current foreground color (gathered from the [Foreground](xref:@ActiproUIRoot.Controls.DynamicImage.Foreground) property). |
40-
| `Width` Property | The height of the image control in device independent units. It's always a good idea to set this property to ensure the image is displayed at its intended size, and must be set if your [Image Provider](../../themes/image-provider.md) can swap in high-DPI images. Inherited from `Image`. |
40+
| `Width` Property | The width of the image control in device independent units. It's always a good idea to set this property to ensure the image is displayed at its intended size, and must be set if your [Image Provider](../../themes/image-provider.md) can swap in high-DPI images. Inherited from `Image`. |
4141

4242
## Using ImageConverter
4343

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
---
2+
title: "Overlay Panes"
3+
page-title: "Overlay Panes - SyntaxEditor Editor View Features"
4+
order: 17
5+
---
6+
# Overlay Panes
7+
8+
Overlay panes are user interface elements that are displayed in the upper-right corner of an [IEditorView](xref:@ActiproUIRoot.Controls.SyntaxEditor.IEditorView). While any content can be displayed, most content will typically be relatively small and can host interactive controls.
9+
10+
The [Search Overlay Pane](../searching/search-overlay-pane.md) is an example of an overlay pane implementation.
11+
12+
## Creating an Overlay Pane
13+
14+
Any control can be an overlay pane, but it must implement the [IOverlayPane](xref:@ActiproUIRoot.Controls.SyntaxEditor.IOverlayPane) interface.
15+
16+
@if (wpf winforms) {
17+
18+
### Inherit OverlayPaneBase
19+
20+
When possible, inheriting a custom pane from [OverlayPaneBase](xref:@ActiproUIRoot.Controls.SyntaxEditor.Implementation.OverlayPaneBase) will simplify the development effort. This abstract class has a default implementation for most members of the [IOverlayPane](xref:@ActiproUIRoot.Controls.SyntaxEditor.IOverlayPane) interface, and individual members can be overridden, as needed, to extend functionality for the custom pane.
21+
22+
}
23+
24+
@if (wpf) {
25+
26+
### Special Consideration for Key Presses
27+
28+
> [!WARNING]
29+
> When typing in an overlay pane, key presses are still sent to the ancestor [SyntaxEditor](xref:@ActiproUIRoot.Controls.SyntaxEditor.SyntaxEditor) control and could result in edit actions being performed.
30+
31+
Pressing keys like <kbd>Tab</kbd> and <kbd>Shift</kbd>+<kbd>Tab</kbd>, which normally move focus, may result in text being indented or outdented in the editor.
32+
33+
To prevent these keys (or any other key combination) from reaching the `SyntaxEditor` control, override the overlay pane control's `OnKeyDown` method and set `KeyEventArgs.Handled = true`.
34+
35+
> [!TIP]
36+
> The [OverlayPaneBase](xref:@ActiproUIRoot.Controls.SyntaxEditor.Implementation.OverlayPaneBase) control has built-in support for handling key presses. By default, <kbd>Tab</kbd> and <kbd>Shift</kbd>+<kbd>Tab</kbd> will be handled and used to move keyboard focus. Override the [OnMoveFocus](xref:@ActiproUIRoot.Controls.SyntaxEditor.Implementation.OverlayPaneBase.OnMoveFocus*) method to customize which elements receive focus. Set [AllowTabKeyToMoveFocus](xref:@ActiproUIRoot.Controls.SyntaxEditor.Implementation.OverlayPaneBase.AllowTabKeyToMoveFocus) = `false` to disable the automatic handling of these keys.
37+
>
38+
>To customize the handling of additional keys, override the [ProcessKeyDown](xref:@ActiproUIRoot.Controls.SyntaxEditor.Implementation.OverlayPaneBase.ProcessKeyDown*) method and return `true` for any keys that were handled by the overlay pane.
39+
40+
}
41+
42+
@if (winforms) {
43+
44+
> [!TIP]
45+
> The [OverlayPaneBase](xref:@ActiproUIRoot.Controls.SyntaxEditor.OverlayPaneBase) control has built-in support for handling key presses. By default, <kbd>Esc</kbd> will be handled and used to close the overlay pane but can be disabled by setting [AllowEscKeyToClose](xref:@ActiproUIRoot.Controls.SyntaxEditor.OverlayPaneBase.AllowEscKeyToClose) = `false`.
46+
>
47+
>To customize the handling of additional keys, override the [ProcessKeyDown](xref:@ActiproUIRoot.Controls.SyntaxEditor.OverlayPaneBase.ProcessKeyDown) method and return `true` for any keys that were handled by the overlay pane. For example, the <kbd>Tab</kbd> and <kbd>Shift</kbd>+<kbd>Tab</kbd> keys can optionally be handled to keep keyboard focus within the pane.
48+
49+
}
50+
51+
## Control Key Down Opacity
52+
53+
Overlay panes can become semi-transparent when the <kbd>Ctrl</kbd> key is held down, thereby allowing the end user to see the text behind it. The [IOverlayPane](xref:@ActiproUIRoot.Controls.SyntaxEditor.IOverlayPane).[ControlKeyDownOpacity](xref:@ActiproUIRoot.Controls.SyntaxEditor.IOverlayPane.ControlKeyDownOpacity) property specifies the opacity when the popup is semi-transparent.
54+
55+
The property value `0.25` is recommended for transparency. Set this property to `1.0` to prevent the pane from becoming semi-transparent.
56+
57+
## Single or Multiple Views
58+
59+
The [IOverlayPane](xref:@ActiproUIRoot.Controls.SyntaxEditor.IOverlayPane).[InstanceKind](xref:@ActiproUIRoot.Controls.SyntaxEditor.IOverlayPane.InstanceKind) property specifies how many instances of the overlay pane are permitted across all views of the same `SyntaxEditor` control.
60+
61+
Set this property to [Single](xref:@ActiproUIRoot.Controls.SyntaxEditor.OverlayPaneInstanceKind.Single) to allow only one instance at a time for any view in the editor. Set this property to [SinglePerView](xref:@ActiproUIRoot.Controls.SyntaxEditor.OverlayPaneInstanceKind.SinglePerView) to allow one instance per view.
62+
63+
## Showing and Activating an Overlay Pane
64+
65+
The [IEditorView](xref:@ActiproUIRoot.Controls.SyntaxEditor.IEditorView).[OverlayPanes](xref:@ActiproUIRoot.Controls.SyntaxEditor.IEditorView.OverlayPanes) collection is used to manage which overlay panes are currently shown for a particular view.
66+
67+
An overlay pane will be displayed when it is added to the [OverlayPanes](xref:@ActiproUIRoot.Controls.SyntaxEditor.IEditorView.OverlayPanes) collection. If an overlay pane of the same key is already displayed, the existing pane can typically be reused instead of creating a new one.
68+
69+
Most overlay panes are interactive and should be activated when they are shown. Each overlay pane can provide its own implementation for what it means to be activated, but this will typically involve setting keyboard focus to a specific element on the pane.
70+
71+
A good practice is to define a static `Show` method on the class that defines an overlay pane. The following code example demonstrates how a `Show` method could be defined on a `CustomOverlayPane` class.
72+
73+
74+
```csharp
75+
/// <summary>
76+
/// Shows the overlay pane within the specified <paramref name="view"/>.
77+
/// </summary>
78+
/// <param name="view">The editor view where the overlay pane will be displayed.</param>
79+
public static void Show(IEditorView view) {
80+
if (view is null)
81+
throw new ArgumentNullException(nameof(view));
82+
83+
// Get or create the custom overlay pane
84+
var overlayPanes = view.OverlayPanes;
85+
var customPane = overlayPanes[Key] as CustomOverlayPane;
86+
if (customPane is null) {
87+
// Close any existing overlay panes before adding a new one
88+
overlayPanes.Clear();
89+
90+
// Add a new custom overlay pane
91+
customPane = new CustomOverlayPane(view);
92+
overlayPanes.Add(customPane);
93+
}
94+
95+
// Activate the pane
96+
customPane.Activate();
97+
}
98+
```
99+
100+
> [!TIP]
101+
> Use the [SyntaxEditor.ActiveView](xref:@ActiproUIRoot.Controls.SyntaxEditor.SyntaxEditor.ActiveView) property to determine which editor view is currently active.

Documentation/topics/syntaxeditor/user-interface/searching/search-overlay-pane.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ Search results can be highlighted as the find text and other search options are
126126

127127
The search overlay pane animates to be semi-transparent when the <kbd>Ctrl</kbd> key is held down, thereby allowing the end user to see the text behind it. [SearchOverlayPane](xref:@ActiproUIRoot.Controls.SyntaxEditor.Primitives.SearchOverlayPane).[ControlKeyDownOpacity](xref:@ActiproUIRoot.Controls.SyntaxEditor.Primitives.SearchOverlayPane.ControlKeyDownOpacity) property specifies the opacity when the popup is semi-transparent.
128128

129-
Set this property to `1.0` to prevent the list from being semi-transparent.
129+
Set this property to `1.0` to prevent the pane from being semi-transparent.
130130

131131
## Programmatically Opening the Pane
132132

Documentation/topics/themes/windowchrome.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ This example shows how the attached `WindowChrome.TitleBarHeader` property can b
263263
<themes:WindowChrome.TitleBarHeader>
264264
<Button Content="{Binding ElementName=window, Path=Title}" Margin="20,0" MaxWidth="300"
265265
Style="{DynamicResource {x:Static themes:SharedResourceKeys.WindowTitleBarButtonBaseStyleKey}}"
266-
Foreground="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(TextElement.Foreground)}"
266+
Foreground="{Binding RelativeSource={RelativeSource AncestorType=ContentControl}, Path=(TextElement.Foreground)}"
267267
IsTabStop="False" Focusable="False" />
268268
</themes:WindowChrome.TitleBarHeader>
269269
...
@@ -355,7 +355,7 @@ This is an example of using the [TitleBarMenu](xref:@ActiproUIRoot.Controls.Titl
355355
TitleBarLeftContentMaxWidthOverflowPercentage="0.75" TitleBarRightContentMaxWidthOverflowPercentage="0" />
356356
</themes:WindowChrome.Chrome>
357357
<themes:WindowChrome.TitleBarLeftContent>
358-
<shared:TitleBarMenu x:Name="menu" Foreground="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(TextElement.Foreground)}">
358+
<shared:TitleBarMenu x:Name="menu" Foreground="{Binding RelativeSource={RelativeSource AncestorType=ContentControl}, Path=(TextElement.Foreground)}">
359359
<MenuItem Header="File">
360360
<MenuItem Header="New" />
361361
<MenuItem Header="Open..." />

0 commit comments

Comments
 (0)