C# 使页面上的UserCOntrol与WPF中的主窗口大小相同

C# 使页面上的UserCOntrol与WPF中的主窗口大小相同,c#,wpf,xaml,C#,Wpf,Xaml,我有一个WPF应用程序。它包括: 加载包含UserControl的页面的主窗口 UserControl只是一个带有播放/暂停控件等的MediaElement 以下是UserControl的XAML: <UserControl x:Class="InstallerToolkit.UserControls.UserControlVideoPlayer" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentati

我有一个WPF应用程序。它包括:

  • 加载包含UserControl的页面的主窗口
  • UserControl只是一个带有播放/暂停控件等的MediaElement
  • 以下是UserControl的XAML:

    <UserControl x:Class="InstallerToolkit.UserControls.UserControlVideoPlayer"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="464">
    <Grid Margin="0,0,0,0" Background="Black">
        <StackPanel  Margin="0,0,0,0" VerticalAlignment="Bottom">
            <MediaElement Name="MediaElement" MediaOpened="Element_MediaOpened" LoadedBehavior="Manual" UnloadedBehavior="Stop"/>
            <StackPanel DockPanel.Dock="Bottom" Background="DarkGray"  HorizontalAlignment="Center" Orientation="Horizontal">
                <Image Source="/Images/control_play.png" MouseDown="OnMouseDownPlayMedia" Margin="5" />
                <Image Source="/images/control_pause.png" MouseDown="OnMouseDownPauseMedia" Margin="5" />
                <Image Source="/images/control_stop.png" MouseDown="OnMouseDownStopMedia" Margin="5" />
                <TextBlock Foreground="White" Margin="5"  VerticalAlignment="Center"><Run Text="Seek To"/></TextBlock>
                <Slider x:Name="timelineSlider" Thumb.DragStarted="DragStarted" Thumb.DragCompleted="DragCompleted" Margin="5" ValueChanged="SeekToMediaPosition"  Width="70"/>
                <TextBlock x:Name="lblProgressStatus" Margin="5"><Run Text="00:00"/></TextBlock>
                <TextBlock x:Name="lblSepatator" Margin="5"><Run Text="/"/></TextBlock>
                <TextBlock x:Name="lblTotalLength" Margin="5" RenderTransformOrigin="3.607,0.455"><Run Text="00:00"/></TextBlock>
                <Image Source="/images/control_stop.png" Margin="145,0,0,0" MouseLeftButtonDown="Image_MouseLeftButtonDown" />
            </StackPanel>
        </StackPanel>
    </Grid>
    
    当我这样做时,我看到视频播放器看起来更大,如下所示:

    请注意,这是我的页面大小,而不是我想要的主窗口大小

    因此,我在我的页面中添加了一个事件,该事件在我的主窗口中触发一个函数,该函数试图从我的页面中获取MediaElement并使其全屏显示。但是我不知道如何从这里获取我的UserCOntrol并使其达到我需要的大小


    我该怎么做呢?

    您正在抓取窗口内容的高度和宽度,而这是页面,而不是您的窗口

    而不是

    var parentWindowWidth = ((System.Windows.Controls.Panel)
                       (Application.Current.MainWindow.Content)).ActualWidth;
    var parentWindowHeight = ((System.Windows.Controls.Panel)
                       (Application.Current.MainWindow.Content)).ActualHeight;
    
    应使用主窗口的高度和宽度:

    var parentWindowWidth = Application.Current.MainWindow.ActualWidth;
    var parentWindowHeight = Application.Current.MainWindow.ActualHeight;
    

    您正在抓取窗口内容的高度和宽度,这是页面,而不是您的窗口

    而不是

    var parentWindowWidth = ((System.Windows.Controls.Panel)
                       (Application.Current.MainWindow.Content)).ActualWidth;
    var parentWindowHeight = ((System.Windows.Controls.Panel)
                       (Application.Current.MainWindow.Content)).ActualHeight;
    
    应使用主窗口的高度和宽度:

    var parentWindowWidth = Application.Current.MainWindow.ActualWidth;
    var parentWindowHeight = Application.Current.MainWindow.ActualHeight;
    

    我找到了解决这个问题的另一种方法

    我创建了一个新窗口,使其大小为1200x750。在这个窗口上,我放置了我的VideoPlayer用户控件并使其全屏显示

    当我点击“全屏”按钮时,我只需启动这个新窗口,并将我的视频的当前位置传递给它,使其看起来像是在继续播放。当这个窗口关闭时,我再次将当前的视频位置传递回来,并从那里继续

        private void VideoPlayer_FullScreenSelected(object sender, EventArgs e)
        {
            VideoPlayer.Pause();
    
            //Get the current media position
            _currentMediaPosition = VideoPlayer.CurrentPosition;
    
            VideoFullScreenWindow fullScreenVideo = new VideoFullScreenWindow(_currentMediaPosition, _videoFile);
    
            fullScreenVideo.ShowDialog();
    
            TimeSpan pos = fullScreenVideo.Position;
    
            VideoPlayer.SeekToPosition(pos);
            VideoPlayer.Play();
    
    
        }
    

    我找到了解决这个问题的另一种方法

    我创建了一个新窗口,使其大小为1200x750。在这个窗口上,我放置了我的VideoPlayer用户控件并使其全屏显示

    当我点击“全屏”按钮时,我只需启动这个新窗口,并将我的视频的当前位置传递给它,使其看起来像是在继续播放。当这个窗口关闭时,我再次将当前的视频位置传递回来,并从那里继续

        private void VideoPlayer_FullScreenSelected(object sender, EventArgs e)
        {
            VideoPlayer.Pause();
    
            //Get the current media position
            _currentMediaPosition = VideoPlayer.CurrentPosition;
    
            VideoFullScreenWindow fullScreenVideo = new VideoFullScreenWindow(_currentMediaPosition, _videoFile);
    
            fullScreenVideo.ShowDialog();
    
            TimeSpan pos = fullScreenVideo.Position;
    
            VideoPlayer.SeekToPosition(pos);
            VideoPlayer.Play();
    
    
        }
    

    两者都给了我相同的参数(宽度=1200,高度=750)。这些是我的主应用程序窗口的实际参数。为什么它不能全屏显示?您在问题中提到了
    请注意它是我页面的大小,而不是我想要的主窗口。
    您不希望它是主窗口的大小吗?很抱歉造成混淆。是的,我希望usercontrol(VideoPlayer)与我的主窗口大小相同,即1200x750。因此,您得到的是1200x750。那有什么问题吗?是的,我将它设置为那个尺寸,但它不会设置为那个尺寸。实际用户控件的大小不是1200x750。它被限制在页面的大小上(页面是1050x525),这两个页面都给了我相同的参数(宽度=1200,高度=750)。这些是我的主应用程序窗口的实际参数。为什么它不能全屏显示?您在问题中提到了
    请注意它是我页面的大小,而不是我想要的主窗口。
    您不希望它是主窗口的大小吗?很抱歉造成混淆。是的,我希望usercontrol(VideoPlayer)与我的主窗口大小相同,即1200x750。因此,您得到的是1200x750。那有什么问题吗?是的,我将它设置为那个尺寸,但它不会设置为那个尺寸。实际用户控件的大小不是1200x750。它以某种方式被限制在其所在页面的大小(页面为1050x525)