我有一个窗口,它的动态大小与它的内容(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("---");
}
注意:所有视频都有不同的尺寸,因此我无法设置固定的宽度或高度
答案 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;
}
。