在页面上创建一个与WPF中的MainWindow相同大小的UserCOntrol

时间:2013-12-18 16:53:51

标签: c# wpf xaml

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

  1. 一个MainWindow,它加载一个包含UserControl的页面。
  2. UserControl只是一个带播放/暂停控件等的MediaElement。
  3. 以下是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>
    

    这是我的UserControl的正常位置:

    enter image description here

    我已经向UserControl添加了一个按钮,试图使其成为MainWindow的完整大小。 当我点击全屏按钮时,我的页面上有一个事件,它执行以下操作:

        private void VideoPlayer_FullScreenSelected(object sender, EventArgs e)
        {            
            var parentWindowWidth = ((System.Windows.Controls.Panel)(Application.Current.MainWindow.Content)).ActualWidth;
            var parentWindowHeight = ((System.Windows.Controls.Panel)(Application.Current.MainWindow.Content)).ActualHeight;
    
            Thickness margin = new Thickness(0,0,0,0);
            VideoPlayer.Margin = margin;
            VideoPlayer.Width = parentWindowWidth;
            VideoPlayer.Height = parentWindowHeight;
    
        }
    

    当我这样做时,我看到VideoPlayer看起来像这样大:

    enter image description here

    请注意它是我的页面的大小,而不是我想要的MainWindow。

    然后我在我的Page中添加了一个事件,该事件触发了我的MainWindow中的一个函数,该函数试图从我的Page中抓取MediaElement并使其全屏显示。但我不知道如何从这里抓取我的UserCOntrol并使其达到我需要的大小。

    我该怎么做?

2 个答案:

答案 0 :(得分:3)

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

而不是

var parentWindowWidth = ((System.Windows.Controls.Panel)
                   (Application.Current.MainWindow.Content)).ActualWidth;
var parentWindowHeight = ((System.Windows.Controls.Panel)
                   (Application.Current.MainWindow.Content)).ActualHeight;

你应该使用MainWindow的高度和宽度:

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

答案 1 :(得分:0)

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

我创建了一个新窗口,其大小为1200x750。在这个窗口中,我放置了我的VideoPlayer Usercontrol并将其全屏显示。

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

    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();


    }