为什么我不创建继承自Window的新WPF Windows?

时间:2016-10-24 10:00:10

标签: .net wpf interface wpf-controls implements

当我创建一个新窗口时,使用Add Item ...对话框,我创建的窗口,例如NewWindow,不会从Window继承。它只与类型Object具有相同的接口。一个例子:

我有下面的弹出窗口代码。代码只能看到IHavePassword成员,而不是`LoginPopup'的其他成员,就像它的控件一样。

Public Class LoginPopup
    Implements IHavePassword

    Public ReadOnly Property Password As SecureString Implements IHavePassword.Password
        Get
            'Return Me.PasswordBox.????
        End Get
    End Property

    Public Event PasswordChanged As RoutedEventHandler Implements IHavePassword.PasswordChanged
    Public Sub PassWordChangedHandler(sender As Object, e As EventArgs)
        PasswordChangedEvent(sender, e)
    End Sub

    Public Sub Close() Implements IHavePassword.Close
        Throw New NotImplementedException
    End Sub

End Class

OH,这里也是必要的XAML:

<Window x:Class="ApptEase.Client.Prism.Views.LoginPopup"
....
<StackPanel Orientation="Vertical" Margin="0">
    <DockPanel LastChildFill="True">
        <TextBlock Text="{Binding Path=UsernameLabel}" DockPanel.Dock="Left" TextAlignment="Right" Margin="5,9,5,5" MinWidth="70" />
        <TextBox Text="{Binding Path=Username, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" Width="Auto" Margin="5" />
    </DockPanel>
    <DockPanel LastChildFill="True">
        <TextBlock Text="{Binding Path=PasswordLabel}" DockPanel.Dock="Left" TextAlignment="Right" Margin="5" MinWidth="70" />
        <PasswordBox x:Name="PasswordBox" PasswordChanged="PassWordChangedHandler" Width="Auto" Margin="5" />
    </DockPanel>
    <DockPanel LastChildFill="True" Height="59">
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
            <Button Content="Log in" Command="{Binding Path=LoginCommand}" CommandParameter="{Binding ElementName=This}" Margin="5" Padding="15,10,15,10" />
            <Button Content="Cancel" Command="{Binding Path=CancelCommand}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" Margin="5" Padding="15,10,15,10"/>
        </StackPanel>
    </DockPanel>
</StackPanel>

属性Me上的IntelliSense列出了IHavePassword的成员,例如:

enter image description here

我希望在这里看到控件和基座Window成员,而不是接口的成员。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:4)

我想你只是忘了用你的命名空间包围这个类:

Namespace ApptEase.Client.Prism.Views
    Public Class LoginPopup
        Implements IHavePassword

        '...

    End Class
End Namespace

答案 1 :(得分:1)

可以肯定的是,在您的评论中,您说LoginPopup是一个部分类,但在您的代码中,您没有“Partial语句”。我主要是C#开发人员,所以我不确定,但是不应该有“Partial Public LoginPopup”吗?

答案 2 :(得分:1)

回答被问到的问题。

添加一个新的&#34;窗口......&#34;而不是使用&#34;添加项目......&#34;并创建一个新的泛型类。然后添加自定义代码。

答案 3 :(得分:0)

首先,这与部分类或继承自Window无关,正如许多评论中所建议的那样。 VB WPF窗口的项模板可以正常处理所有这些;我们停止了&#34;手工编码&#34; UI窗口和控件很久以前。

然后,我已经放弃了找出导致这种情况的原因,除了很可能是项目文件或VS功能失调。我创建了一个新的VB WPF项目,当我添加一个新的Window时,一切都很好,即继承是正确的。

相关问题