Własna kontrolka i content.

0

Tworzę buttona, który wygląda jak sześciokąt(obiekt Polygon) - dzięki odpowiedniemu stylowi i ControlTemplate. Niestety gdy tak robię, przypisanie czegoś do właściwości Content mojego buttona nic nie wyświetla - jak sobie z tym fantem poradzić.

0

Użyj kontrolki ContentPresenter w swoim ControlTemplate.

0

Pytanie gdzie jej użyć? Nie mogę jej dać jako content do Polygona. A jak zrobię jakiś Panel i w nim dam i Polygon i ConternPresenter to moja kontrolka mimo że wizualnie będzie wyglądała na sześciokąt(Polygon), to będzie czworokątem(Panelem), co jest dla mnie problemem ze względu na to że muszę te kontrolki postawić obok siebie (będą się przykrywały częściowo gdy będą za duże, bo będą miały wystający Panel).

0

Może dodam jeszcze... Ogólnie chodzi mi o to aby stworzyć kontrolkę, która będzie miała właściwości np. Buttona(interesuje mnie Click, MouseOver i Content). Kontrolka ma mieć kształt sześciokąta, jednak nie tylko wizualnie, ale i praktycznie - ma być jak canvas - wrzucimy do niej coś za dużego to sześciokąt pozostaje sześciokątem, i przycina to co wystaje. Co więcej, kontrolka mieć pole content, tak aby można na niej wyświetlić obrazek - i tu zauważcie, że aby wyświetlić na sześciokącie obrazek, który też jest sześciokątem, obiekt Image, musi być większy niż sześciokąt - bo jest czworokątem. Dlatego chce aby moja kontrolka miała kształt sześciokąta, który wytnie to co wystaje. Myślę że da się to zrozumieć, choć trochę namieszałem. Proszę o pomoc.

0

Pokaż kod.

0

Tak wygląda z content presenterem i z faktem, że moja kontrolka mimo że wygląda na sześciokąt jest czworokątem, który reaguje na Event click w miejscu gdzie kończy się sześciokąt, a trwa jeszcze czworokąt... A celem jest sześciokąt i tyle, na którym mogę wyświetlić duży obrazek, który zostanie przycięty. O tym przycinaniu tyle mówie, bo pokazanie obrazka w kształcie sześciokąta, wiąże się z większym ob niego obiektem Image.

<UserControl x:Class="MapResources.ucHex"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:converters="clr-namespace:MapResources.Converters"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300" Name="Hexagon">

    <UserControl.Resources>
        <converters:HexSizeToPointsConverter x:Key="HexSizeToPointsConverter" />
        <converters:HexRailsConverter x:Key="HexRailsConverter" />
        <converters:ImageHeightConverter x:Key="ImageHeightConverter" />
        <converters:ImageWidthConverter x:Key="ImageWidthConverter" />
        <Style TargetType="{x:Type Button}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Canvas>
                            <Polygon Fill="AliceBlue" Points="{Binding Path=Size, ElementName=Hexagon,
                                Converter={StaticResource HexSizeToPointsConverter}}">
                            </Polygon>
                            <ContentPresenter></ContentPresenter>
                        </Canvas>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style TargetType="{x:Type Image}">
            <Setter Property="Height" Value="{Binding Path=Size, ElementName=Hexagon, Converter={StaticResource ImageHeightConverter}}" />
            <Setter Property="Width" Value="{Binding Path=Size, ElementName=Hexagon, Converter={StaticResource ImageWidthConverter}}" />
        </Style>
    </UserControl.Resources>
    
    <Canvas>
        <Button Click="MainButton_Click">
            <Image Name="Rails">
                <Image.Source>
                    <MultiBinding Converter="{StaticResource HexRailsConverter}">
                        <Binding Path="HexObject" ElementName="Hexagon" UpdateSourceTrigger="PropertyChanged"/>
                        <Binding Path="Size" ElementName="Hexagon" UpdateSourceTrigger="PropertyChanged"/>
                    </MultiBinding>
                </Image.Source>
            </Image>
        </Button>
    </Canvas>
</UserControl>

user image

0

Uwzględniając wszystkie moje wymagania, problem jest nie rozwiązywalny. Można zamknąć.

0

Może jeszcze cię zainteresować właściwość "clip" obiektu Canvas która pozwoli ci przyciąć wystający obrazek
http://msdn.microsoft.com/en-us/library/system.windows.uielement.clip.aspx

0

Wydawało mi się, że przejrzałem już cały internet, a jednak nie ;]. Co do mojego problemu, który tutaj bardzo pokracznie przedstawiłem. Nie ma do niego rozwiązania, bo chce osiągnąć rzecz niemożliwą i nielogiczną - której nie będę już tłumaczył. Ale dzięki ci bardzo za linki bo już widzę, że przydadzą się w mojej całej aplikacji.

0

Bardzo spodobał mi się HexagonGridTest, ale zastanawia mnie jedno. Dlaczego gdy umieszczę tą kontrolkę w ScrollViewer, działa tylko Vertical przesuwanie, i jak naprawić Horizontal? To Twoja kontrolka? Mógłbyś pomóc z tej sprawie?

0

Błąd naprawiony. W kontrolce był błąd w obliczeniach. Mimo że nie planowałem, zrobiłem swoją do mojej aplikacji, działa pięknie. Jeszcze raz dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1