当绑定元素时,WPF透明度会发生变化

时间:2015-05-12 17:02:47

标签: wpf xaml

VisualBrush用于填充WPF窗口中的Rectangle

通过将其Visual属性绑定到窗口中的非透明元素来填充。

如何使Rectangle填充变得透明,以便通过它可以看到窗口后面的内容,而不会使其他元素透明?

大致遵循创建反射效果的方法on MSDN,并查看有关使用透明窗口herehere使特定元素不透明的SO问题,我已经提出在XAML中使用以下内容。但是,我似乎无法使Rectangle透明,也不会使TextBlock也必须透明。

<!-- Window.AllowsTransparency is set to true,
    so WindowStyle must also be set to None.
    Background is set to Transparent so child
    elements have capability to be transparent
    to what is behind the window. -->

<Window x:Class="XAMLViewTests.TransparentTestWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TransparentTestWindow"
        AllowsTransparency="True"
        WindowStyle="None" Background="Transparent">
    <StackPanel Orientation="Vertical">

        <!-- Two elements: TextBlock and Rectangle -->

        <TextBlock x:Name="textBlock" Background="White">This is some text.</TextBlock>

        <Rectangle Height="{Binding ElementName=textBlock, Path=ActualHeight}">
            <!-- Fill rectangle with a Visual element bound to TextBlock,
            so it shows exactly the same as TextBlock. Transforms, effects, etc
            can now be performed on the Visual. -->

            <Rectangle.Fill>
                <VisualBrush Stretch="None" Visual="{Binding ElementName=textBlock}">
                </VisualBrush>
            </Rectangle.Fill>
        </Rectangle>
    </StackPanel>
</Window>

1 个答案:

答案 0 :(得分:0)

您不能将文本块设置为背景,并使其背景透明,仅用于绑定。

您可以做的是将另一个文本块设置为背景并将所有相关值绑定到原始文本块:

<Rectangle.Fill>
    <VisualBrush Stretch="None">
        <VisualBrush.Visual>
            <TextBlock Background="Transparent" 
                        Text="{Binding ElementName=textBlock, Path=Text}" 
                        Width="{Binding ElementName=textBlock, Path=ActualWidth}" />
        </VisualBrush.Visual>
    </VisualBrush>
</Rectangle.Fill>