Note that there are some explanatory texts on larger screens.

plurals
  1. PODirectCast(False, Nullable(Of Boolean)) error
    text
    copied!<p>I took some code from a C# project and put it into a converter. The original code was:</p> <pre><code>(Nullable&lt;bool&gt;)false </code></pre> <p>and the converter said the VB equivalent is:</p> <pre><code>DirectCast(False, Nullable(Of Boolean)) </code></pre> <p>I even compiled the C# project and looked at it in Reflector. It gave the same VB code as above, but this generates the error:</p> <pre><code>Value of type 'Boolean' cannot be converted to 'Boolean?' </code></pre> <p>How do I cast this properly?</p> <p>More Code as requested:</p> <pre><code>Imports System.Windows Imports System.Windows.Controls.Primitives Imports System.Windows.Input Public Class VirtualToggleButton Public Shared ReadOnly IsCheckedProperty As DependencyProperty = DependencyProperty.RegisterAttached("IsChecked", _ GetType(Nullable(Of Boolean)), _ GetType(VirtualToggleButton), _ New FrameworkPropertyMetadata(DirectCast(False, Nullable(Of Boolean)), _ FrameworkPropertyMetadataOptions.BindsTwoWayByDefault Or _ FrameworkPropertyMetadataOptions.Journal, _ New PropertyChangedCallback(AddressOf OnIsCheckedChanged))) Public Shared Function GetIsChecked(ByVal d As DependencyObject) As Nullable(Of Boolean) Return DirectCast(d.GetValue(IsCheckedProperty), Nullable(Of Boolean)) End Function Public Shared Sub SetIsChecked(ByVal d As DependencyObject, ByVal value As Nullable(Of Boolean)) d.SetValue(IsCheckedProperty, value) End Sub Private Shared Sub OnIsCheckedChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs) Dim pseudobutton As UIElement = TryCast(d, UIElement) If pseudobutton IsNot Nothing Then Dim newValue As Nullable(Of Boolean) = DirectCast(e.NewValue, Nullable(Of Boolean)) If newValue = True Then RaiseCheckedEvent(pseudobutton) ElseIf newValue = False Then RaiseUncheckedEvent(pseudobutton) Else RaiseIndeterminateEvent(pseudobutton) End If End If End Sub Public Shared ReadOnly IsThreeStateProperty As DependencyProperty = DependencyProperty.RegisterAttached("IsThreeState", _ GetType(Boolean), _ GetType(VirtualToggleButton), _ New FrameworkPropertyMetadata(CBool(False))) Public Shared Function GetIsThreeState(ByVal d As DependencyObject) As Boolean Return CBool(d.GetValue(IsThreeStateProperty)) End Function Public Shared Sub SetIsThreeState(ByVal d As DependencyObject, ByVal value As Boolean) d.SetValue(IsThreeStateProperty, value) End Sub Public Shared ReadOnly IsVirtualToggleButtonProperty As DependencyProperty = DependencyProperty.RegisterAttached("IsVirtualToggleButton", _ GetType(Boolean), _ GetType(VirtualToggleButton), _ New FrameworkPropertyMetadata(CBool(False), _ New PropertyChangedCallback(AddressOf OnIsVirtualToggleButtonChanged))) Public Shared Function GetIsVirtualToggleButton(ByVal d As DependencyObject) As Boolean Return CBool(d.GetValue(IsVirtualToggleButtonProperty)) End Function Public Shared Sub SetIsVirtualToggleButton(ByVal d As DependencyObject, ByVal value As Boolean) d.SetValue(IsVirtualToggleButtonProperty, value) End Sub Private Shared Sub OnIsVirtualToggleButtonChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs) Dim element As IInputElement = TryCast(d, IInputElement) If element IsNot Nothing Then If CBool(e.NewValue) Then AddHandler element.MouseLeftButtonDown, New MouseButtonEventHandler(AddressOf VirtualToggleButton.OnMouseLeftButtonDown) AddHandler element.KeyDown, New KeyEventHandler(AddressOf VirtualToggleButton.OnKeyDown) Else RemoveHandler element.MouseLeftButtonDown, New MouseButtonEventHandler(AddressOf VirtualToggleButton.OnMouseLeftButtonDown) RemoveHandler element.KeyDown, New KeyEventHandler(AddressOf VirtualToggleButton.OnKeyDown) End If End If End Sub Friend Shared Function RaiseCheckedEvent(ByVal target As UIElement) As RoutedEventArgs If target Is Nothing Then Return Nothing End If Dim args As New RoutedEventArgs() args.RoutedEvent = ToggleButton.CheckedEvent [RaiseEvent](target, args) Return args End Function Friend Shared Function RaiseUncheckedEvent(ByVal target As UIElement) As RoutedEventArgs If target Is Nothing Then Return Nothing End If Dim args As New RoutedEventArgs() args.RoutedEvent = ToggleButton.UncheckedEvent [RaiseEvent](target, args) Return args End Function Friend Shared Function RaiseIndeterminateEvent(ByVal target As UIElement) As RoutedEventArgs If target Is Nothing Then Return Nothing End If Dim args As New RoutedEventArgs() args.RoutedEvent = ToggleButton.IndeterminateEvent [RaiseEvent](target, args) Return args End Function Private Shared Sub OnMouseLeftButtonDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs) e.Handled = True UpdateIsChecked(TryCast(sender, DependencyObject)) End Sub Private Shared Sub OnKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) If e.OriginalSource Is sender Then If e.Key = Key.Space Then If (Keyboard.Modifiers And ModifierKeys.Alt) = ModifierKeys.Alt Then Return End If UpdateIsChecked(TryCast(sender, DependencyObject)) e.Handled = True ElseIf e.Key = Key.Enter AndAlso CBool(TryCast(sender, DependencyObject).GetValue(KeyboardNavigation.AcceptsReturnProperty)) Then UpdateIsChecked(TryCast(sender, DependencyObject)) e.Handled = True End If End If End Sub Private Shared Sub UpdateIsChecked(ByVal d As DependencyObject) Dim isChecked As Nullable(Of Boolean) = GetIsChecked(d) If isChecked = True Then SetIsChecked(d, If(GetIsThreeState(d), DirectCast(Nothing, Nullable(Of Boolean)), DirectCast(False, Nullable(Of Boolean)))) Else SetIsChecked(d, isChecked.HasValue) End If End Sub Private Shared Sub [RaiseEvent](ByVal target As DependencyObject, ByVal args As RoutedEventArgs) If TypeOf target Is UIElement Then TryCast(target, UIElement).[RaiseEvent](args) ElseIf TypeOf target Is ContentElement Then TryCast(target, ContentElement).[RaiseEvent](args) End If End Sub End Class </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload