单击菜单以将UserControl调用到MainWindow的网格中

问题描述 投票:0回答:2

我想单击菜单“正在播放”,然后将UserControl调用到MainWindow的网格中

MainWindow.xaml:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Menu Height="30" VerticalAlignment="Top">
        <MenuItem Height="30" Header="Now Playing" x:Name="NowPlaying" Click="NowPlaying_Click" />
        <MenuItem Height="30" Header="Music Library" Click="MenuItem_Click" />
        <MenuItem Height="30" Header="Play Schedule" />
        <MenuItem Height="30" Header="Control" />
        <MenuItem Height="30" Header="Option" />
    </Menu>
    <Grid Margin="0,30,0,0" x:Name="MainBoard">
        (UserControl"NowPlaying")
    </Grid>
</Grid>

MainWindow.xaml.vb

Private Sub NowPlaying_Click(sender As Object, e As RoutedEventArgs) Handles NowPlaying.Click  
        Dim MainWindow = TryCast(System.Windows.Window.GetWindow(Me), MainWindow)
        Dim MainWindowBoard = MainWindow.MainBoard
        Dim NowPlayingBoard As UserControl = New NowPlaying
        #???
End Sub

UserControl.xaml:

<Grid>
        <Grid Width="800" Margin="0,0,0,100"/>
        <Grid Margin="0,350,0,0" Background="#FFFFDADA">
            <Slider Margin="10,10,10,0" VerticalAlignment="Top" Height="30"/>
        </Grid>
</Grid>
wpf vb.net user-controls
2个回答
1
投票

您将控件添加到Panel,例如通过使用Grid属性Panel.Children

您的代码可以简化。由于事件处理程序是在后面的代码中定义的,因此您只需使用Me就可以直接访问其所有字段和属性。调用Window.GetWindow是多余的。

Private Sub NowPlaying_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    Dim nowPlayingControl As UserControl = New NowPlaying()
    Me.MainBoard.Children.Add(nowPlayingControl)
End Sub

0
投票

我的回答:

Private Sub NowPlaying_Click(sender As Object, e As RoutedEventArgs) Handles NowPlaying.Click
        Dim NowPlayingBoard As UserControl = New NowPlaying
        Me.MainBoard.Children.Clear()
        Me.MainBoard.Children.Add(NowPlayingBoard)
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.