Laden...

UserControl Contentpresenter funktioniert nicht

Erstellt von ByteDevil vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.788 Views
ByteDevil Themenstarter:in
132 Beiträge seit 2013
vor 4 Jahren
UserControl Contentpresenter funktioniert nicht

Hallo,

ich möchte ein Control basteln, welches eine spezielle Form hat und aus einem Button besteht, sowie einem Rechteck auf dem der Content als string ausgegeben wird.

Folgendes habe ich bisher:

<UserControl x:Class="UserControlTest.FilterControl"
             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:local="clr-namespace:UserControlTest"
             mc:Ignorable="d"
             Height="25" Width="117.833">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="20"/>
        </Grid.ColumnDefinitions>
        <Rectangle Fill="#FFA0A0A0"/>
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
        <Polygon Grid.Column="1" Points="0,0 20,12.5 0,25" Fill="#FFA0A0A0"/>
        <Button Width="9" Height="9" Grid.Column="1" Margin="2,7.5,8,7.5" Click="Button_Click">
            <Button.Template>
                <ControlTemplate TargetType="Button">
                    <Grid>
                        <Ellipse Stroke="Black" StrokeThickness="1"/>
                        <Line X1="7.5" Y1="7.5" X2="1.75" Y2="1.75" Stroke="Black"/>
                        <Line X1="7.5" Y1="1.75" X2="1.75" Y2="7.5" Stroke="Black"/>
                    </Grid>
                </ControlTemplate>
            </Button.Template>
        </Button>
    </Grid>
</UserControl>

Das sieht soweit im designer ganz gut aus. Instanziiere ich das Ganze nun aber, ist lediglich der text zu sehen und alles andere ist weg. Ausser ich weise keinen Content zu, dann sieht es aus wie im designer.

Was mache ich denn falsch?

Grüße

1.040 Beiträge seit 2007
vor 4 Jahren

Nimm als Basis ein ContentControl anstatt ein UserControl.

ByteDevil Themenstarter:in
132 Beiträge seit 2013
vor 4 Jahren

Leider verhält es sich dann genauso 😦 Nutze ich den ContentPresenter nicht richtig?

1.040 Beiträge seit 2007
vor 4 Jahren

Vermutlich ist das Problem, dass es ein "komplettes" UserControl ist.
Dass was du möchtest ist eher ein Custom Control:
https://blogs.msdn.microsoft.com/windowsappdev/2012/10/15/building-a-custom-control-using-xaml-and-c/

Bei Custom Controls trennt man quasi Code und XAML voneinander. Deine Klasse kann dann von einem ContentControl erben.

=)

709 Beiträge seit 2008
vor 4 Jahren

Hat dein FilterControl eine Content-Eigenschaft, aus der der ContentPresenter seinen Inhalt beziehen kann?

ByteDevil Themenstarter:in
132 Beiträge seit 2013
vor 4 Jahren

Vermutlich ist das Problem, dass es ein "komplettes" UserControl ist.
Dass was du möchtest ist eher ein Custom Control:

>

Bei Custom Controls trennt man quasi Code und XAML voneinander. Deine Klasse kann dann von einem ContentControl erben.

=)

Dann erstellt mir VS keine XAML datei 🤔

@pinki: Ja es erbt wohl eine Content-Eigenschaft.

1.040 Beiträge seit 2007
vor 4 Jahren

Dann erstellt mir VS keine XAML datei 👶

Das ist korrekt, die musst du selber anlegen.
Stichwort: ResourceDictionary

@pinki: Ja es erbt wohl eine Content-Eigenschaft.

In deinem UserControl definierst du den kompletten Content, "von außen" überschreibst du ihn dann wieder. Deswegen geht es nicht.

Schau dir auch mal die Property "ContentTemplate" an.

301 Beiträge seit 2009
vor 4 Jahren

Weitere Infos kannst du hier finden.

https://www.wpftutorial.net/HowToCreateACustomControl.html