Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Es ist empfehlenswert, in WPF UI und Daten voneinander zu trennen. Somit kannst du per DataTemplate deine Daten in verschiedenen Steuerelementen darstellen.Liege ich da richtig, dass ich das UI von der "Daten"-Klasse trennen muss? Und das mache ich mit DataTemplates, die von einem Basiselement erben?
Es ist möglich, zum Beispiel einer ListView oder einem anderen Listensteuerelement eine Collection von Daten zu übergeben (Mit der ObservableCollection bekommt dein Steuerelement sogar noch mit, ob sich die Liste durch Benutzerinteraktion o.Ä. geändert hat). Innerhalb dieses Steuerelements kannst du dann eigene ItemTemplates schreiben, welche dann eigene Darstellungen für jeden Typ innerhalb der Liste haben. Damit brauchst du dann keine Steuerelemente zu übergeben, sondern nur per Binding deine Datenelemente übergeben.Ist es Möglich, ein eigenes Steuerelement zu programmieren, das als Content Steuerelemente akzeptiert, die es dann an eine bestimmte Stelle in sich selbst einfügt? Dann könnte ich DataTemplates programmieren, die dieses Steuerelement als Haupt-Element haben. Das kann ich dann wiederum über die Contenteigenschaft anpassen. Wäre das auch eine schöne Lösung? Oder ist das "schlechte" Vererbung?
Ich glaube, du hast meine Fragestellung ein wenig falsch verstanden... Mit Content waren eher andere Steuerelemente gemeint, die dann in dem übergeordneten erscheinen. Ich lege ja zum Beispiel bei einem Grid Steuerelemente als Content fest, die das Grid dann in sich positioniert. Kann ich eigene Steuerelemente programmieren, die auch so ein Verhalten haben? Also wo ich die Steuerelemente, die als Content übergeben werden, an einer bestimmten Stelle eingefügt werden. Ist soetwas sinnvoll, um Vererbung zu ersetzen bzw. nachzuahmen?Es ist möglich, zum Beispiel einer ListView oder einem anderen Listensteuerelement eine Collection von Daten zu übergeben (Mit der ObservableCollection bekommt dein Steuerelement sogar noch mit, ob sich die Liste durch Benutzerinteraktion o.Ä. geändert hat). Innerhalb dieses Steuerelements kannst du dann eigene ItemTemplates schreiben, welche dann eigene Darstellungen für jeden Typ innerhalb der Liste haben. Damit brauchst du dann keine Steuerelemente zu übergeben, sondern nur per Binding deine Datenelemente übergeben.
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »CeDoMain« (27.04.2015, 22:22)
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Zitat
Von Hier zweite Antwort.
Quellcode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <!-- Content for the template (note: not a template itself) --> <Border x:Shared="False" x:Key="Foo" BorderBrush="Red" BorderThickness="1" CornerRadius="4"> <TextBlock Text="{Binding SomeProp}" /> </Border> <DataTemplate x:Key="TemplateA"> <!-- Static resource - No binding needed --> <ContentPresenter Content="{StaticResource Foo}" /> </DataTemplate> <DataTemplate x:Key="TemplateB"> <!-- Static resource - No binding needed --> <ContentPresenter Content="{StaticResource Foo}" /> </DataTemplate>
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
<ItemsControl Grid.Row="1" x:Name="FunctionsPanel" ItemsSource="{Binding Path=ActualFixture.Functions}" Margin="0,190,0,0"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.Resources> <Style TargetType="Border" x:Key="FunctionBorder"> <Setter Property="BorderBrush" Value="#FF6C6C6C"/> <Setter Property="Background" Value="#FFEAEAEA"/> <Setter Property="BorderThickness" Value="3"/> <Setter Property="CornerRadius" Value="20"/> <Setter Property="Margin" Value="5"/> </Style> <Style TargetType="StackPanel" x:Key="FunctionStackPanel"> <Setter Property="Margin" Value="15"/> </Style> <Grid x:Key="FunctionBase" x:Shared="false"> <Grid.RowDefinitions> <RowDefinition Height="64"/> <RowDefinition Height="10"/> <RowDefinition Height="24"/> <RowDefinition Height="10"/> <RowDefinition Height="*"/> <RowDefinition Height="10"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="64"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="64"/> </Grid.ColumnDefinitions> <Grid.Resources> <Style TargetType="Border" x:Key="PictureBorder"> <Setter Property="BorderBrush" Value="#FF6C6C6C"/> <Setter Property="Background" Value="#FFEAEAEA"/> <Setter Property="BorderThickness" Value="2"/> <Setter Property="CornerRadius" Value="5"/> </Style> </Grid.Resources> <!-- Typ --> <Border Grid.Row="0" Grid.Column="0" Style="{StaticResource PictureBorder}"> <Image Margin="0" Source="Resources/Images/None.ico"/> </Border> <Label Grid.Row="0" Grid.Column="1" Content="{Binding Path=Type}" HorizontalContentAlignment="Center" FontSize="20" FontWeight="Bold" VerticalContentAlignment="Center"/> <Border Grid.Row="0" Grid.Column="2" Style="{StaticResource PictureBorder}"> <Image Margin="0" Source="{Binding Path=PictureFileName}" /> </Border> <!-- Name --> <Label Grid.Row="2" Grid.Column="0" Content="Name:"/> <TextBox Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Text="{Binding Path=Name}"/> <!-- Kanäle --> <GroupBox Header="Kanäle" Grid.Row="4" Grid.ColumnSpan="3"> <!-- Kanaltemplates [...] --> </GroupBox> </Grid> <DataTemplate DataType="{x:Type l:FunctionRGB}"> <Border Style="{StaticResource FunctionBorder}"> <StackPanel Style="{StaticResource FunctionStackPanel}"> <ContentPresenter Content="{StaticResource FunctionBase}"/> <Button> RGB </Button> </StackPanel> </Border> </DataTemplate> <DataTemplate DataType="{x:Type l:FunctionDimmer}"> <Border Style="{StaticResource FunctionBorder}"> <StackPanel Style="{StaticResource FunctionStackPanel}"> <ContentPresenter Content="{StaticResource FunctionBase}"/> <Button> Dimmer </Button> </StackPanel> </Border> </DataTemplate> </ItemsControl.Resources> </ItemsControl> |
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Werbeanzeige