Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Custom Panel + XAML

[es] :: .NET :: WPF Programiranje :: Custom Panel + XAML

[ Pregleda: 2490 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Shadowed
Vojvodina

Član broj: 649
Poruke: 12848



+4784 Profil

icon Custom Panel + XAML29.07.2009. u 10:42 - pre 179 meseci
Znam kako mogu napraviti custom panel. Pravim klasu nasledjenu iz Panel-a i override-ujem MeasureOverride i ArrangeOverride.
Medjutim, ono sto bi meni trebalo je da napravim klasu koja ce u isto vreme imati neki xaml i dodatno biti panel.
Recimo, da ima neke bordere i grafiku okolo i u srednjem delu da se nalaze child-ovi.

Medjutim, problem je sto ako kreiram user control i dobijem mogucnost da pravim xaml kod, ne mogu naslediti iz Panel-a u kodu. Buni se i kaze da ne nasledjuje iz istog tipa u razlicitim delovima parcijalne klase.

Postoji li neki nacin da se ovo prevazidje a da nije kreiranje tih dodatnih elemenata iz C# koda?
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Custom Panel + XAML29.07.2009. u 11:00 - pre 179 meseci
Zar ne mozes da enkapsuliras panel u user kontroli i da ga publikujes i da time bude dostupan iz forme?
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12848



+4784 Profil

icon Re: Custom Panel + XAML29.07.2009. u 11:28 - pre 179 meseci
Bio bi dostupan u kodu, kao public promenljiva, ali meni je potrebno da uradim sledece:
Code:

<My:CustomPanel>
    <Button Content="Test" />
</My:CustomPanel>


I da mi button bude u panel-u koji ima neku "dekoraciju" uradjenu u xaml-u.
Sta zapravo hocu... Da panel ima okvir i kvardratice za resize pa da korisnik moze menjati velicinu istog kao da je npr prozor.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Custom Panel + XAML29.07.2009. u 12:21 - pre 179 meseci
Tesko preko user controle, sta vise nemoguce u tom formatu, eventualno uz malo gimanstike bi mogao da postignes nesto kao:

Code:

<My:CustomPanel>
    <My:CustomPanel.panel>
        <Button Content="Test" />
    </My:CustomPanel.panel>
</My:CustomPanel>


Ono sto ti hoces se zove agregacija i preduslov za agregaciju nasledjivanjem (bez interfejsa) je visetruko nasledjivanje, (ovde tebi treba da klasa tvoje user kontrole nasledjuje i Panel da bi se ponasala kao Panel i UserControl da bi je WFP konzumirao). Cela prica odmah pada u vodu jer CLI narafski ne podrzava vistruko nasledjivanje a WPF ne radi preko interfesja. Ta prica nije mogla ni u WInforms user controlama.

Eventualno mozes da pravis custom control koji nasledjuje samo od Panel, ali onda imas cimanje sa iscrtavanjem i pretpostavljam da ti se ne mili
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12848



+4784 Profil

icon Re: Custom Panel + XAML29.07.2009. u 13:00 - pre 179 meseci
Uspeo sam da ga nateram da nasledjuje Panel tako sto sam u obj/debug/MyControl.g.cs takodje stavio da je nasledjeno iz Panel-a i onda su sve parcijalne klase ok.
Medjutim, to ne resava problem jer onda nema onog sto je uradjeno u xaml-u a ni button se ne vidi.

Nema, veze, uradicu na neki drugi nacin...
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12848



+4784 Profil

icon Re: Custom Panel + XAML02.10.2009. u 15:19 - pre 177 meseci
Ovo se moze postici na sledeci nacin:
1. Desni klik na projekat, Add > New item...
2. Dodaje se nova CustomControl (ne UserControl). Visual Studio ce dodati fajlove CustomControl1.cs i Themes\Generic.xaml
3. Otvoriti CustomControl1.cs i u liniji public class CustomControl1 : Control zameniti Control sa CustomControl i sacuvati fajl.
4. Otvoriti Generic.xaml. Njegov default sadrzaj je:

Code:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1">


    <Style TargetType="{x:Type local:CustomControl1}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:CustomControl1}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>


5. Izmeniti XAML kod da odgovara potrebama. Na primer (dajem samo deo gde je menjano):
Code:

                     <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <StackPanel>
                            <Label>Sadrzaj je ispod</Label>
                            <Border Background="Transparent" BorderBrush="DarkGray" BorderThickness="1" Padding="2">
                                <ContentPresenter Content="{TemplateBinding ContentControl.Content}" />
                            </Border>
                        </StackPanel>
                    </Border>


Najbitniji deo je <ContentPresenter Content="{TemplateBinding ContentControl.Content}" />.
Na tom mestu ce biti ono sto se prilikom primene daje kao content.

6. Sada se moze primeniti kontrola kao npr. ovako:

Code:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:WpfApplication1"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <my:CustomControl1>
            <Button>test</Button>
        </my:CustomControl1>
    </Grid>
</Window>



Napomena: Ovo nije sasvim identicno onome sto sam pitao na pocetku, nije u pitanju panel, ali radi upravo ono sto mi je trebalo (i slicno je pitanom) pa sam ovde dao resenje.
 
Odgovor na temu

[es] :: .NET :: WPF Programiranje :: Custom Panel + XAML

[ Pregleda: 2490 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.