Unplanned
Last Updated: 05 Apr 2023 09:13 by Martin Ivanov
On English keyboard the AltGr key is treated as Right Alt key which behaves the same as the standard (Left) Alt key. However, on some cultures (like French) the AltGr key is used as a modifier that toggles few special keys. This behavior is similar to holding the Shift key, but the set of special keys that are activated is different.

Currently, RadVirtualKeyboard doesn't support the special behavior of the AltGr key.
Unplanned
Last Updated: 28 Nov 2024 11:25 by ADMIN
Created by: Walter
Comments: 3
Category: VirtualKeyboard
Type: Bug Report
1

Hello,

I found a bug where the EmptySpace element breaks the layout. When I use a Key-Button instead, the layout shifts to the correct position. However, I don't actually want to have any button in this position at all.

EmptySpace Element:


<RadVirtualKeyboard xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Grid> 
        <KeysLayout KeySpacing="0.1"> 
            <Rows> 
                <Row> 
                    <Keys>
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="81" /> 
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="87" /> 
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="69" /> 
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="82" /> 
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="84" />
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="89" />
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="85" /> 
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="73" /> 
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="79" /> 
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="80" />
                        <Key DisplayText="&#xf55a;" KeyType="Special" Width="2" Height="1" VirtualKey="8" />
					</Keys> 
                </Row> 
                <Row> 
                    <Keys>
	                    <EmptySpace Width="0.5" Height="1" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="65" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="83" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="68" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="70" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="71" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="72" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="74" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="75" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="76" />
						<EmptySpace Width="1" Height="1" />
						<Key DisplayText="&#xe331;" KeyType="Special" Width="1.5" Height="2" VirtualKey="13" />
                    </Keys> 
                </Row> 
                <Row> 
                    <Keys>
						<Key DisplayText="&#xf357;" KeyType="Lock" Width="1.5" Height="1" VirtualKey="20" />
						<Key KeyType="Normal" Width="1" Height="1" VirtualKey="90" />
						<Key KeyType="Normal" Width="1" Height="1" VirtualKey="88" />
						<Key KeyType="Normal" Width="1" Height="1" VirtualKey="67" />
						<Key KeyType="Normal" Width="1" Height="1" VirtualKey="86" />
						<Key KeyType="Normal" Width="1" Height="1" VirtualKey="66" />
						<Key KeyType="Normal" Width="1" Height="1" VirtualKey="78" />
						<Key KeyType="Normal" Width="1" Height="1" VirtualKey="77" />
						<Key DisplayText="," KeyType="Normal" Width="1" Height="1" />
						<Key DisplayText="." KeyType="Normal" Width="1" Height="1" />
					</Keys> 
                </Row> 
                <Row> 
                    <Keys>	               
	                    <Key DisplayText="&amp;123" KeyType="Special" Width="2" Height="1" VirtualKey="113" />
                        <Key DisplayText="" KeyType="Special" Width="10" Height="1" VirtualKey="32" />	                
					</Keys> 
                </Row> 
            </Rows> 
        </KeysLayout> 
   </Grid> 
</RadVirtualKeyboard> 

Key-Element (Layout desired with EmptySpace):


<RadVirtualKeyboard xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Grid> 
        <KeysLayout KeySpacing="0.1"> 
            <Rows> 
                <Row> 
                    <Keys>
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="81" /> 
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="87" /> 
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="69" /> 
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="82" /> 
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="84" />
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="89" />
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="85" /> 
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="73" /> 
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="79" /> 
                        <Key KeyType="Normal" Width="1" Height="1" VirtualKey="80" />
                        <Key DisplayText="&#xf55a;" KeyType="Special" Width="2" Height="1" VirtualKey="8" />
					</Keys> 
                </Row> 
                <Row> 
                    <Keys>
	                    <EmptySpace Width="0.5" Height="1" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="65" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="83" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="68" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="70" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="71" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="72" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="74" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="75" />
	                    <Key KeyType="Normal" Width="1" Height="1" VirtualKey="76" />
	                    <Key DisplayText="'" KeyType="Normal" Width="1" Height="1" />
						<Key DisplayText="&#xe331;" KeyType="Special" Width="1.5" Height="2" VirtualKey="13" />
                    </Keys> 
                </Row> 
                <Row> 
                    <Keys>
						<Key DisplayText="&#xf357;" KeyType="Lock" Width="1.5" Height="1" VirtualKey="20" />
						<Key KeyType="Normal" Width="1" Height="1" VirtualKey="90" />
						<Key KeyType="Normal" Width="1" Height="1" VirtualKey="88" />
						<Key KeyType="Normal" Width="1" Height="1" VirtualKey="67" />
						<Key KeyType="Normal" Width="1" Height="1" VirtualKey="86" />
						<Key KeyType="Normal" Width="1" Height="1" VirtualKey="66" />
						<Key KeyType="Normal" Width="1" Height="1" VirtualKey="78" />
						<Key KeyType="Normal" Width="1" Height="1" VirtualKey="77" />
						<Key DisplayText="," KeyType="Normal" Width="1" Height="1" />
						<Key DisplayText="." KeyType="Normal" Width="1" Height="1" />
					</Keys> 
                </Row> 
                <Row> 
                    <Keys>	               
	                    <Key DisplayText="&amp;123" KeyType="Special" Width="2" Height="1" VirtualKey="113" />
                        <Key DisplayText="" KeyType="Special" Width="10" Height="1" VirtualKey="32" />	                
					</Keys> 
                </Row> 
            </Rows> 
        </KeysLayout> 
   </Grid> 
</RadVirtualKeyboard> 

Unplanned
Last Updated: 26 Feb 2025 09:12 by Stenly
Currently, when setting the Culture property of the RadVirtualKeyboard control, the OS keyboard layout will be changed as well.

We can add an option to control this behavior.
Unplanned
Last Updated: 06 Oct 2025 11:20 by Martin Ivanov
RadVirtualKeyboard starts a new Task which constantly checks the system culture and synchronizes this with the culture of the control. When the control gets unloaded or when the SynchronizeCultureWithSystem property is set to False, the Task's thread is stopped using the Cancel method of the associated CancellationToken, along with the ThrowIfCancellationRequested method. 

This throws an OperationCanceledException, which is the expected behavior to signal that the thread was canceled. However, the exception is marked as unobserved, which throws the TaskScheduler.UnobservedTaskException static event. This doesn't cause problems in the control or the host application, but the RadVirtualKeyboard can handled it better, so the exception is not marked as unobserved.
Unplanned
Last Updated: 22 May 2023 12:19 by Patrick
Hook to external keyboard special keys degrades performance the control so it might be useful to provide an API to disable this functionality.
Unplanned
Last Updated: 17 Apr 2024 07:23 by Martin Ivanov
Created by: Martin Ivanov
Comments: 0
Category: VirtualKeyboard
Type: Feature Request
0
Add an event on the RadVirtualKeyboard class that is raised when a key button is pressed. For example, KeyPressed or something like this. 
Unplanned
Last Updated: 29 Apr 2024 13:00 by Martin Ivanov

The CapsLock key should toggle only the letters. Currently, it behaves as Shift because it shows the secondary text of other keys as well (for example the number keys and their special characters). To reproduce this the ShowSecondaryText attribute of the corresponding key should be set to False.

To work this around, you can create a custom view model for the numeric keys that updates the DisplayText manually.

 

public class CustomKeyFactory : DefaultKeyFactory
{
    public override BaseKeyViewModel CreateKey(int virtualKey, KeyType keyType = KeyType.Normal, string displayText = null, double width = 1, double height = 1, int alternateVirtualKey = -1, string alternateText = null, bool showSecondaryText = false)
    {
        if (keyType == KeyType.Normal)
        {
            return new CustomRegularKeyViewModel(virtualKey, width, height, showSecondaryText, displayText);
        }
        return base.CreateKey(virtualKey, keyType, displayText, width, height, alternateVirtualKey, alternateText, showSecondaryText);
    }
}

public class CustomRegularKeyViewModel : RegularKeyViewModel
{
    public CustomRegularKeyViewModel(int virtualKey, double keyWidth, double keyHeight, bool showSecondaryText, string displayText = null) : base(virtualKey, keyWidth, keyHeight, showSecondaryText, displayText)
    {
    }

    public override void Update(IKeyUpdateContext context)
    {            
        base.Update(context);
        if (this.VirtualKey >= 48 && this.VirtualKey <= 57) // you may need to extend the if-statement to check for other keys as well
        {
            this.DisplayText = context.IsShiftActive ? this.ShiftText : this.LowerText;
        }
    }
}

 

Unplanned
Last Updated: 30 Jan 2025 04:57 by Martin Ivanov
Add a property that allows you to set a Style targeting the key button elements. The property should work in the default scenario where the RadVirtualKeyboard control uses its default VirtualKeyboardTemplateSelector. If the selector is replaced, thus the DataTemplates with the buttons, the new property should not be applied.