Własna kontrolka i content.

Odpowiedz Nowy wątek
2011-08-29 23:27
Artur21
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ć.

Pozostało 580 znaków

2011-08-30 09:35
0

Użyj kontrolki ContentPresenter w swoim ControlTemplate.


Pozostało 580 znaków

2011-08-30 10:33
Artur21
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).

Pozostało 580 znaków

2011-08-30 10:52
Artur21
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.

Pozostało 580 znaków

2011-08-30 10:53
0

Pokaż kod.


Pozostało 580 znaków

2011-08-30 11:23
Artur21
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

Pozostało 580 znaków

2011-08-30 17:52
Artur21
0

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

Pozostało 580 znaków

2011-08-30 21:51
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-[...]m.windows.uielement.clip.aspx

Pozostało 580 znaków

2011-08-30 22:43
0

https://skydrive.live.com/?ci[...]84&id=27CDB908D14E584!900

HexagonGridTest

Zerknij na to :)

Pozostało 580 znaków

2011-08-31 22:59
Artur21
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.

Pozostało 580 znaków

2011-09-01 00:07
Artur21
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?

Nie moja, sam szukałem takich cudów bo potrzebowałem ;) A co do problemu, to sprawdzę wieczorem ;) - Madm4n 2011-09-01 07:12

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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