下面是我的UWP app媒体元素的XAML代码,但它不提供自定义媒体控件,为什么呢?
<MediaElement x:Name="Media" Grid.Row="1" AutoPlay="True" AreTransportControlsEnabled="True" >
<MediaElement.TransportControls>
<MediaTransportControls Background="#FFF5F509" Foreground="#FF0625EA"/>
</MediaElement.TransportControls>
</MediaElement>
1 回答
虽然
MediaTransportControls
具有Background
和Foreground
属性,但设置这些属性不会影响MediaTransportControls
的外观 . 因为默认情况下MediaTransportControls使用ThemeResource
中定义的ColorBrush
.您可以在MediaTransportControls styles and templates或 generic.xaml (典型地在 C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.10240.0\Generic )中找到
MediaTransportControls
的模板,搜索"MediaTransportControls" .形成它的模板,我们可以发现它的
Background
和Foreground
被设置为某些ThemeResource
,例如:如果我们想使用
MediaTransportControls
的Background
和Foreground
属性来自定义媒体传输控制,我们需要将Background
或Foreground
设置为{TemplateBinding Foreground}
. 对于某些属性,例如Background
,它可能很容易 . 您只需找到名为"ControlPanelGrid"的Grid
并更改其Background
如下:但对于像
Foreground
这样的属性来说,这很复杂 . 因为Foreground
在很多子Style
中定义,并且它们在不同的样式中具有不同的值 . 在WinRT中,它不支持Setter.Value的绑定用法 . 所以你必须逐个设置{TemplateBinding Foreground}
. 这里我在<CommandBar.PrimaryCommands>
中使用AppBarButton
例如:在此之后,您可以将此样式放在
<Application.Resources>
中,并将此style
ax:key
设为<Style x:Key="MyMediaTransportControlsStyle" TargetType="MediaTransportControls">
. 然后你可以在MediaTransportControls
中使用这个新样式:MediaTransportControls
将使用您在Background
和Foreground
属性中设置的颜色 .