I took some code from a C# project and put it into a converter. The original code was:
(Nullable<bool>)false
and the converter said the VB equivalent is:
DirectCast(False, Nullable(Of Boolean))
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:
Value of type 'Boolean' cannot be converted to 'Boolean?'
How do I cast this properly?
More Code as requested:
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
				
                        
It looks like you can just remove the DirectCast. From what I see you are passing a false into a function/method that has a Boolean? (or Nullable(of Boolean)) as a parameter. VB does not need the explicit casting that C# requires (although it's not a bad idea in some cases). For a simple example,
Just as a side note, in case it is confusing Nullable(of Boolean) and Boolean? mean the same thing which is that it is a boolean variable that can have a value of true, false or nothing.