Tworzymy aplikację XBAP, w której musimy mieć zaokrąglone rogi w różnych lokalizacjach na jednej stronie i chcielibyśmy mieć kontener WPF Rounded Corner, w którym można umieścić kilka innych elementów. Czy ktoś ma jakieś sugestie lub przykładowy kod, jak najlepiej to osiągnąć? Czy ze stylami na lub z tworzeniem niestandardowej kontrolki?
wpf
rounded-corners
FarrEver
źródło
źródło
Odpowiedzi:
Nie potrzebujesz niestandardowej kontrolki, po prostu umieść kontener w elemencie obramowania:
Możesz zastąpić
<Grid/>
dowolny z kontenerów układu ...źródło
<Border BorderBrush="Black" BorderThickness="1" CornerRadius="8">
jest odpowiednim zamiennikiem tego, nieco bardziej soczystymWiem, że to nie jest odpowiedź na wstępne pytanie ... ale często chcesz przyciąć wewnętrzną zawartość tej właśnie utworzonej zaokrąglonej krawędzi.
Chris Cavanagh wymyślił na to doskonały sposób .
Wypróbowałem kilka różnych podejść do tego ... i myślę, że to rządzi.
Oto xaml poniżej:
źródło
Po prostu musiałem to zrobić sam, więc pomyślałem, że opublikuję tutaj inną odpowiedź.
Oto inny sposób tworzenia zaokrąglonej krawędzi narożnej i przycinania jej wewnętrznej zawartości . Jest to prosty sposób przy użyciu właściwości Clip. Fajnie, jeśli chcesz uniknąć VisualBrush.
XAML:
Kod konwertera:
źródło
Implementacja rozwiązania Kobusb do kontroli granic oparta na kodzie VB.Net. Użyłem go do wypełnienia kontrolki ListBox of Button. Kontrolki Button są tworzone na podstawie rozszerzeń MEF. Każde rozszerzenie używa atrybutu ExportMetaData MEF jako opisu rozszerzenia. Rozszerzenia to obiekty wykresów VisiFire. Użytkownik naciska przycisk wybrany z listy przycisków, aby wykonać żądany wykres.
źródło
Jeśli próbujesz umieścić przycisk w ramce z zaokrąglonym prostokątem, powinieneś sprawdzić przykład msdn . Znalazłem to, szukając w Google obrazów problemu (zamiast tekstu). Ich obszerny prostokąt zewnętrzny można (na szczęście) łatwo usunąć.
Zwróć uwagę, że będziesz musiał ponownie zdefiniować zachowanie przycisku (ponieważ zmieniłeś ControlTemplate). Oznacza to, że będziesz musiał zdefiniować zachowanie przycisku po kliknięciu za pomocą tagu Trigger (Property = "IsPressed" Value = "true") w tagu ControlTemplate.Triggers. Mam nadzieję, że to oszczędza komuś czas, który straciłem :)
źródło