C#/WPF 将 Window 调整为 MediaElement 的原始内容大小
C#/WPF Resize Window to MediaElement's Original Content size
我有一个 Window,它根据内容 (MediaElement) 动态调整大小。
为此,我使用 Window 和属性 SizeToContent="WidthAndHeight"
。
我的 MediaElement 是这样设置的 Stretch="Uniform" StretchDirection="DownOnly"
.
使用这些设置,Window 将与 MediaElement 控件的原始大小一样大。但是 Stretching 设置为 DownOnly,我希望可以将 window 变大。
但是,当我将属性 StretchDirection 设置为两者时,Window 将在我使用 MediaElement 加载另一部电影时最大化。
我希望 Window 具有 MediaElement 的大小,但是当我使 Window 变大时,我希望 MediaElement 也变大。
提前感谢您的帮助!
这是 WPF Window
<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("---");
}
注意:所有视频都有不同的尺寸,所以我无法设置固定的宽度或高度
很抱歉,我无法确定您问题的原因。但是这里有一个解决方案。
解法:
一开始设置 StretchDirection="DownOnly"
,但是当您更改 window 的大小时,将其设置为 UpOnly
。
技术说明:
为此,您必须订阅 Window
的 SizeChanged
事件。但问题是,此事件也会在应用程序启动时触发。因此,您必须在加载 window.
后订阅该事件
因此,首先订阅 window 的 Loaded
事件,然后在该事件处理程序中订阅 SizeChanged
事件:
XAML(在 window 标签中):
Loaded="Window_Loaded"
C#:
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
MediaEL.StretchDirection = StretchDirection.UpOnly;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.SizeChanged += Window_SizeChanged;
}
你也可以参考this文章,它用很好的例子定义了StretchDirection
。
我有一个 Window,它根据内容 (MediaElement) 动态调整大小。
为此,我使用 Window 和属性 SizeToContent="WidthAndHeight"
。
我的 MediaElement 是这样设置的 Stretch="Uniform" StretchDirection="DownOnly"
.
使用这些设置,Window 将与 MediaElement 控件的原始大小一样大。但是 Stretching 设置为 DownOnly,我希望可以将 window 变大。 但是,当我将属性 StretchDirection 设置为两者时,Window 将在我使用 MediaElement 加载另一部电影时最大化。
我希望 Window 具有 MediaElement 的大小,但是当我使 Window 变大时,我希望 MediaElement 也变大。
提前感谢您的帮助!
这是 WPF Window
<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("---");
}
注意:所有视频都有不同的尺寸,所以我无法设置固定的宽度或高度
很抱歉,我无法确定您问题的原因。但是这里有一个解决方案。
解法:
一开始设置 StretchDirection="DownOnly"
,但是当您更改 window 的大小时,将其设置为 UpOnly
。
技术说明:
为此,您必须订阅 Window
的 SizeChanged
事件。但问题是,此事件也会在应用程序启动时触发。因此,您必须在加载 window.
因此,首先订阅 window 的 Loaded
事件,然后在该事件处理程序中订阅 SizeChanged
事件:
XAML(在 window 标签中):
Loaded="Window_Loaded"
C#:
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
MediaEL.StretchDirection = StretchDirection.UpOnly;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.SizeChanged += Window_SizeChanged;
}
你也可以参考this文章,它用很好的例子定义了StretchDirection
。