首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >wpf中的聚光灯效果

wpf中的聚光灯效果
EN

Stack Overflow用户
提问于 2012-10-29 14:40:22
回答 1查看 1.1K关注 0票数 0

有没有办法在wpf中实现聚光灯效果?http://www.youtube.com/watch?v=LgLw29c-qr8

我可以理解OpacityMask会允许我这样做,但是我如何将图像(或背景)渲染到画布上,但除了渲染按钮的区域外,所有图像(或背景)都将显示为白色?

这里有几张图片可以更好地解释我的问题。

显示位于屏幕左边缘的按钮的frame1,遮蔽了部分画布背景。

在屏幕中间显示按钮的frame2,遮蔽了画布背景的不同部分。

被遮罩的实际画布背景

EN

回答 1

Stack Overflow用户

发布于 2012-10-29 15:32:13

我想出了下面的解决方案,

代码语言:javascript
运行
复制
<Window x:Class="Masking.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Name="ParentWindow" 
    WindowStyle="SingleBorderWindow"
    Title="MainWindow" Width="800" Height="600">
<StackPanel>
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
        <Slider Value="{Binding ElementName=VisualButton, Path=(Canvas.Left)}" Minimum="0" Maximum="800" Width="800" Canvas.Left="0" Canvas.Top="10" TickFrequency="100" LargeChange="10" />
        <TextBlock Text="{Binding ElementName=VisualButton, Path=(Canvas.Left)}" />
    </StackPanel>
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
        <Slider Value="{Binding ElementName=VisualButton, Path=(Canvas.Top)}" Minimum="0" Maximum="800" Width="800" Canvas.Left="0" Canvas.Top="10" TickFrequency="100" LargeChange="10" />
        <TextBlock Text="{Binding ElementName=VisualButton, Path=(Canvas.Top)}" />
    </StackPanel>
    <Canvas Width="800" Height="600">
        <Canvas.OpacityMask>
            <VisualBrush Stretch="None" Viewbox="0,0,800,600" ViewboxUnits="Absolute" Viewport="0,0,800,600" ViewportUnits="Absolute">
                <VisualBrush.Visual>
                    <Canvas Width="800" Height="600">
                        <Button x:Name="VisualButton" Width="100" Height="100" Canvas.Left="0" Canvas.Top="0" />
                    </Canvas>
                </VisualBrush.Visual>
            </VisualBrush>
        </Canvas.OpacityMask>
        <Canvas.Background>
            <ImageBrush ImageSource="Desert.jpg" />
        </Canvas.Background>
    </Canvas>
</StackPanel>

但我认为这不是正确的方法。如果可能的话,请让我知道更好的方法。

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

https://stackoverflow.com/questions/13116971

复制
相关文章

相似问题

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