WPF приложение без полей с закругленными углами - PullRequest
0 голосов
/ 19 февраля 2011

Я создал приложение WPF без полей и с изображением, которое я хочу использовать в качестве фона.Я создал свое изображение в Paint, поэтому у меня не было возможности сделать углы прозрачными.Я бы хотел, чтобы у приложения были закругленные углы, но я не получаю ожидаемых результатов с XAML.Я попытался добавить границу, чтобы получить желаемый эффект, но когда я запускаю приложение, изображение все еще перед границей.Вот мой кодЧто я делаю не так?

<Border BorderBrush="Black" CornerRadius="15,15,15,15" BorderThickness="1,1,1,1" Width="242" Height="426">
    <Grid>
        <Image Height="425" Name="image1" Stretch="Fill" Width="240" Source="/Test;component/Test.png" />
        <Grid Height="334" HorizontalAlignment="Left" Margin="24,39,0,0" Name="grid1" VerticalAlignment="Top" Width="198" />
    </Grid>
</Border>

Ответы [ 3 ]

1 голос
/ 19 февраля 2011

эти настройки в окне сделают его прозрачным:

WindowStyle="None"
AllowsTransparency="True"
Background="Transparent"

, а затем просто установите фон границы для изображения:

  <Border BorderBrush="Transparent" BorderThickness="1" CornerRadius="15">
            <Border.Background>
                <ImageBrush>
                    <ImageBrush.ImageSource>
                <BitmapImage UriSource="/Test;component/Test.png" />
                    </ImageBrush.ImageSource>
                </ImageBrush>
            </Border.Background>
        </Border>
0 голосов
/ 03 ноября 2011

Вот специальная граница, где ClipToBounds работает отлично.Если вы измените в ответе Эреза «Граница» на «ClippingBorder», то он должен работать.

''' <Remarks>
'''     As a side effect ClippingBorder will surpress any databinding or animation of 
'''         its childs UIElement.Clip property until the child is removed from ClippingBorder
''' </Remarks>

Public Class ClippingBorder
Inherits Border
Protected Overrides Sub OnRender(ByVal dc As DrawingContext)
    OnApplyChildClip()
    MyBase.OnRender(dc)
End Sub

Public Overrides Property Child() As UIElement
    Get
        Return MyBase.Child
    End Get
    Set(ByVal value As UIElement)
        If Me.Child IsNot value Then
            If Me.Child IsNot Nothing Then
                ' Restore original clipping
                Me.Child.SetValue(UIElement.ClipProperty, _oldClip)
            End If

            If value IsNot Nothing Then
                _oldClip = value.ReadLocalValue(UIElement.ClipProperty)
            Else
                ' If we dont set it to null we could leak a Geometry object
                _oldClip = Nothing
            End If
            MyBase.Child = value
        End If
    End Set
End Property

Protected Overridable Sub OnApplyChildClip()
    Dim _child As UIElement = Me.Child
    If _child IsNot Nothing Then
        _clipRect.RadiusX = InlineAssignHelper(_clipRect.RadiusY, Math.Max(0.0, Me.CornerRadius.TopLeft - (Me.BorderThickness.Left * 0.5)))
        _clipRect.Rect = New Rect(_child.RenderSize)
        _child.Clip = _clipRect
    End If
End Sub

Private _clipRect As New RectangleGeometry()
Private _oldClip As Object
Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, ByVal value As T) As T
    target = value
    Return value
End Function

End Class

И вы можете использовать http://www.developerfusion.com/tools/convert/vb-to-csharp/, если вам больше нравится C #.

0 голосов
/ 19 февраля 2011

Я думаю, вам нужно добавить ClipToBounds = "True" к изображению.

...