Закругленные углы на холсте исчезают, когда Элемент перетаскивают к границе - PullRequest
1 голос
/ 08 августа 2011

У меня есть этот код:

    <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 ]

4 голосов
/ 11 августа 2011

Просто подумал о другом решении ..

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

установите фон границы на нужный вам цвет на холсте и сделайте холст прозрачным !!

так, как вы делаетене нужно накладывать отступы или поля на элементы!

0 голосов
/ 08 августа 2011

Лучше всего ставить холст внутри рамки (обычно я накладываю небольшое поле на панели внутри закругленных углов, чтобы не торчали предметы).Таким образом, граница будет расширяться или сжиматься автоматически, как это делает холст (при условии, что для него задана автоматическая ширина по высоте).

Граница может иметь одного дочернего содержимого, в данном случае 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 библиотека

...