[WPF] Wrap elements

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • XiniX88
  • Registratie: December 2006
  • Laatst online: 11-09 06:58
Het probleem
Ik probeer bestaande elementen van een pakket (DevExpress) te wrappen in mijn eigen controls, echter, door dit te doen komen er nodes tussen te staan zoals ItemPresenter / ContentPresenter, waardoor DevExpress haar onderliggende nodes niet meer goed ziet, de directe child is dus een ItemPresenter, en niet de items binnen de ItemPresenter.

Nu kan je overerven van de classes van DevExpress, waardoor je niet tegen het probleem aanloopt, echter wil ik compleet los van DevExpress zijn (zie het als het maken van een grafische engine, waarbij je middenlaag de calls doorgeeft naar of OpenGL of DirectX).

Wat probeer ik
Een control:
C#:
1
2
3
4
5
6
7
8
9
10
[StyleTypedProperty(Property = "ItemContainerStyle", StyleTargetType = typeof(Group))]
public class Tabs: ItemsControl // MS Standaard voor meerdere items in 1 control
{

}
// En
public class Tab : ContentControl
{

}


De XAML: (Hier implementeer ik pas DevExpress, zou ook in code mogen, zolang het geen overerving is, hierdoor krijgt men in design mode namelijk de properties van DevExpress te zien)
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<Style TargetType="{x:Type Controls:Tabs}">
    <Setter Property="Focusable" Value="False" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Controls:Tabs}">
                <layout:LayoutGroup View="Tabs"> <!-- De wrapper -->
                    <ItemsPresenter /> <!-- Print de verschillende tabs -->
                </layout:GroupBox>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<Style TargetType="{x:Type Controls:Tab}">
    <Setter Property="Focusable" Value="False" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Controls:Tab}">
                <layout:LayoutGroup Header="Mijn tabje">
                    <ContentPresenter /> <!-- Print de content -->
                </layout:GroupBox>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


En als laatste de page:
XML:
1
2
3
4
<Tabs>
    <Tab><!-- Content van tab 1--></Tab>
    <Tab><!-- Content van tab 2--></Tab>
</Tabs>


Wat gaat er fout
DevExpress zoekt binnen zijn LayoutGroup naar zn directe kinderen, maar dat is hierbij ItemPresenter... Wat ik dus wil is dat <Tab> en <Tab> directe kinderen worden van LayoutGroup, ik wil dus wrappers maken die vervolgens in dit geval de elementen van DevExpress gebruiken, maar dan wel zonder ItemPresenter en ContentPresenter, aangezien deze een extra node pushen met childs.

De vraag
Is er een makkelijke manier, wat niet gebruik maakt van extenden van de classes van DevExpress, voor het maken van eigen elementen, zonder een ContentPresenter of ItemPresenter ertussen te krijgen (dit vind DevExpress niet leuk, en wil directe Child nodes hebben)?

Met een artikel ben ik overigens blij genoeg, maar wrap elements, wrap controls wpf geven geen relevante hits op google.