首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在样式中使用MediaElement的VisualBrush

在样式中使用MediaElement的VisualBrush
EN

Stack Overflow用户
提问于 2016-02-26 05:32:33
回答 1查看 498关注 0票数 1

我有一个将文本转换为形状的UserControl。然后我可以用笔刷来描边或填满它。当我尝试使用带有MediaElement (视频)的可视画笔作为源时,我遇到了问题。当我直接在XAML中这样做时,如下所示:

代码语言:javascript
复制
                    <custom:ExtendedTextBlock Text="Video Filled Text" FontFamily="Arial Black" FontSize="60">
                <custom:ExtendedTextBlock.Fill>
                    <VisualBrush>
                        <VisualBrush.Visual>
                            <MediaElement Source="assets\1267066.mp4" Width="596" Height="366" LoadedBehavior="Play" Stretch="UniformToFill" MediaEnded="MediaElement_MediaEnded" MediaFailed="MediaElement_MediaFailed" MediaOpened="MediaElement_MediaOpened" />
                        </VisualBrush.Visual>
                    </VisualBrush>
                </custom:ExtendedTextBlock.Fill>
            </custom:ExtendedTextBlock>

它工作得很好。当我尝试使用相同的信息创建样式时出现问题:

代码语言:javascript
复制
           <Style x:Key="VideoFill" TargetType="{x:Type custom:ExtendedTextBlock}">
        <Setter Property="StrokeThickness" Value="2" />
        <Setter Property="Stroke" Value="Black" />
        <Setter Property="Fill">
            <Setter.Value>
                <VisualBrush>
                    <VisualBrush.Visual>
                        <MediaElement Source="assets/1267066.mp4" Width="596" Height="366" LoadedBehavior="Play" LoadedBehavior="Play" Stretch="UniformToFill" MediaEnded="MediaElement_MediaEnded" MediaFailed="MediaElement_MediaFailed" MediaOpened="MediaElement_MediaOpened" />
                    </VisualBrush.Visual>
                </VisualBrush>
            </Setter.Value>
        </Setter>
    </Style>

我没有得到满足。不抛出MediaOpened,也不抛出MediaFailed。它只是不会渲染填充。将同样的方法与SolidColorBrush、LinearGradientBrush、ImageBrush一起使用,都能完美地工作。有人能告诉我这是怎么回事吗?

EN

回答 1

Stack Overflow用户

发布于 2016-02-26 07:33:27

我见过各种各样的MediaElement不能很好地与其他WPF组件配合使用的例子,我不认为开发团队会像使用其他组件那样全面地进行集成测试。这个特殊的例子似乎是我见过的几次突然出现的bug,其中一个样式中使用的元素被创建,然后在初始化过程中被多次销毁。MediaElement似乎正在进行某种类型的延迟处理,感到困惑,最终认为它不再被使用。信不信由你,解决方案就是简单地设置UnloadedBehavior="Play"

但就我个人而言,我倾向于避免让XAML框架控制这样的事情。我自己使用MediaPlayer的方法是使每个实例都成为静态资源,将LoadedBehaviorUnloadedBehavior都设置为"Manual",并使用包含依赖属性的混合行为手动控制回放,我将依赖属性绑定回我的视图模型。这提供了完全代码驱动的媒体元素控制的所有优点,而不会破坏MVVM,也不需要交叉手指和希望框架自己运行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35638783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档