当元素拖动到边框时,画布上的圆角落消失

时间:2011-08-08 14:41:43

标签: wpf canvas drag-and-drop border rounded-corners

我有这段代码:

    <Window x:Class="WpfApplication8.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ScrollViewer Background="#FFADB9CD"  >
            <Grid>
                <Border Name="mask" Height="{Binding ElementName=cnvsEtikett, Path=Height}" Width="{Binding ElementName=cnvsEtikett, Path=Width}" Background="White" CornerRadius="6"/>
                <Canvas Height="100" Name="cnvsEtikett" Width="200" Background="White" ClipToBounds="True">
                    <Canvas.OpacityMask>
                        <VisualBrush Visual="{Binding ElementName=mask}" />
                    </Canvas.OpacityMask>
                    <TextBlock Height="23.2"  Text="TextBlock" Canvas.Left="63" Canvas.Top="41" />
                </Canvas>
            </Grid>
        </ScrollViewer>
    </Grid>
</Window>

我希望画布有圆角,直到我将文本块拖到任意一侧。然后角落消失了。这是我的程序中窗口的简单重新创建,我使用拖放操作来移动文本块。我真的需要那些圆角,但我绝对不知道如何解决这个问题!

任何想法??

编辑:当文本块移动到边缘时,似乎画布被拉伸(因为角半径也会改变!)

2 个答案:

答案 0 :(得分:4)

想到另一种解决方案..

<Border ClipToBounds="True" CornerRadius="6" Background="White" Name="brdEtikett" Height="200" Width="200" >
    <Canvas Name="cnvsEtikett" Background="Transparent"  />
</Border>

将边框的背景设置为画布上所需的颜色,并使画布透明!!

这样你就不必在元素上加上填充或边距了!

答案 1 :(得分:0)

最好的选择可能是将画布放在边框内(我通常在圆角边框内的面板上放一小块边缘以防止东西伸出)。这样,边框将像画布一样自动展开或收缩(假设它设置为自动高度宽度)。

Border可以有一个内容子项,在本例中是Canvas,内容是自己的。

修改

这不能达到同样的目的吗?

    <Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="WpfApplication8.MainWindow"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ScrollViewer Background="#FFADB9CD"  >
            <Grid>
                <Border x:Name="mask" Background="White" CornerRadius="6" HorizontalAlignment="Center" VerticalAlignment="Center">
                    <Canvas Height="100" x:Name="cnvsEtikett" Width="200" ClipToBounds="True" d:LayoutOverrides="Margin">
                        <TextBlock Height="23.2"  Text="TextBlock" Canvas.Left="59" Canvas.Top="31" />
                    </Canvas>
                </Border>
            </Grid>
        </ScrollViewer>
    </Grid>
</Window>

Gong Solutions Drag Drop Helper library