C#/ WPF将窗口调整为MediaElement的原始内容大小

时间:2015-01-21 18:34:00

标签: c# wpf resize mediaelement

我有一个窗口,它的动态大小与它的内容(MediaElement)。

为此我使用了一个带有属性SizeToContent="WidthAndHeight"的窗口。 我的MediaElement设置如下Stretch="Uniform" StretchDirection="DownOnly"

使用这些设置,窗口将与MediaElement控件的原始大小一样大。但Stretching设置为DownOnly,我希望有可能让窗口更大。 但是当我将Attribute StretchDirection设置为Both时,当我使用MediaElement加载另一个Movie时,Window将最大化。

我希望Window具有MediaElement的大小,但是当我使Window更大时,我希望MediaElement也变得更大。

提前感谢您的帮助!

这是WPF窗口

<base:ContentWindow x:Class="ExplorerExtension.WindowsMediaWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:base="clr-namespace:ExplorerExtension" ShowActivated="False" 
WindowStyle="None" ResizeMode="CanResizeWithGrip" SizeToContent="WidthAndHeight">
    <Grid>
        <MediaElement x:Name="MediaEL" MediaOpened="MediaEL_MediaOpened"
                  LoadedBehavior="Manual" Stretch="Uniform" StretchDirection="DownOnly"/>
    </Grid>
</base:ContentWindow>

代码

    public WindowsMediaWindow()
    {
        InitializeComponent();
        MediaEL.Source = new Uri("---");
    }

Picture of the Window

注意:所有视频都有不同的尺寸,因此我无法设置固定的宽度或高度

1 个答案:

答案 0 :(得分:1)

对不起,我无法找出问题的原因。但这是一个解决方案。

<强>解决方案:

首先设置StretchDirection="DownOnly",但在更改窗口大小时,请将其设置为UpOnly

技术说明:

要执行此操作,您必须订阅SizeChanged的{​​{1}}事件。但问题是,此事件也会在应用程序启动时触发。因此,您必须在加载窗口后订阅该事件。

因此,首先订阅窗口的Window事件,并在该事件处理程序中订阅Loaded事件:

XAML(在窗口标记中):

SizeChanged

<强> C#:

Loaded="Window_Loaded"

您还可以参考this文章,它使用非常好的示例定义private void Window_SizeChanged(object sender, SizeChangedEventArgs e) { MediaEL.StretchDirection = StretchDirection.UpOnly; } private void Window_Loaded(object sender, RoutedEventArgs e) { this.SizeChanged += Window_SizeChanged; }