Objektname aus Variablen (für Windows Store App)

  • Modern UI

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Objektname aus Variablen (für Windows Store App)

    Hallo,

    ich habe eine Menge durchnummerierter Buttons und würde sie gerne in einer Schleife mit aus Name und Nummer zusammen gesetzem Namen ansprechen. Wenn ich versuche sie einfach als String zusammen zu fügen funktioniert es leider nicht.

    Bei VB.net hätte ich jetzt in Richtung me.controls oder so recherchiert aber so etwas gibt es bei Windows Store App meines Wissens nach nicht.

    Hat da jemand eine Idee wie man das lösen könnte?

    Danke

    tolox schrieb:

    Bei VB.net hätte ich jetzt in Richtung me.controls oder so recherchiert
    Recherchiere mal in Richtung MVVM-Pattern.

    Also Buttons über zusammengesetzte Strings ansprechen war auch schon in WinForms NoGo (nurso am Rand).

    Du musst die Geschichte ganz anners angucken:
    Du hast nicht viele Buttons, sondern du hast viele Daten, in einer Liste.
    Im Xaml hast du ein ItemsControl, dessen ItemsSource an die Liste gebunden ist.
    Im ItemsControl gibts ein DataTemplate für deine Daten, und dieses Template stellt deine Daten als Button dar.

    Also nochmal: Du hast nicht viele Buttons, sondern viele Daten. Und im Xaml haste genau ein ItemsControl mit einem DataTemplate (mit einem Button drin).
    Wpf-Buttons haben kein Hintergrundbild.

    natürlich hatman verschiedene Möglichkeiten, ein Bildle auffm Button anzuzeigen. Bei allen diesen Möglichkeiten gilt:
    Will man die Erscheinung der Buttons manipulieren, kann man neben dem CommandBinding noch weitere Bindings setzen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @VincentTB: Items. gibt es nicht.

    @ErfinderDesRades: Wir reden ja auch von Windows Store Apps (siehe Titel). Ich wusste nur nicht wo ich es sonst posten soll. Außerdem soll nicht nur das Hintergrundbild, sondern auch andere Eigenschaften für jeden Button individuell manipuliert werden. Und da ich nicht für jeden Button eine eigene Funktion anlegen wollte, dachte ich an eine Schleife. Dazu brauche ich den variablen Buttonnamen.

    tolox schrieb:

    Wir reden ja auch von Windows Store Apps
    ja, habich auf Wiki nachgeguckt: Die Oberfläche von so Apps basiert auf Wpf, wenn man mit den .Net-Sprachen programmiert.

    Und auch für die anneren Button-Eigenschaften gilt:

    ErfinderDesRades schrieb:

    Will man die Erscheinung der Buttons manipulieren, kann man neben dem CommandBinding noch weitere Bindings setzen.



    guggemol auf Binding-Picking im Xaml-Editor die FolderBrowser-Favoriten-Buttons: das ist ein DataTemplate mit 3 Bindings: ein Command, ein Bildle, ein Text.
    Die sind da zwar statisch, aber könnteman problemlos iwas dran rumwackeln im Viewmodel, und würde dann auch inne Oberfläche wackeln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    CommandBinding? Keine Ahnung.

    So setzt man Buttons mit Hintergrundbild in XAML:

    VB.NET-Quellcode

    1. <Button x:Name="Button1" Content="Button" Height="115" Canvas.Left="770" Canvas.Top="100" Width="100">
    2. <Button.Background>
    3. <ImageBrush ImageSource="Assets/Logo1.png"/>
    4. </Button.Background>
    5. </Button>


    und so manipuliert man es in VB:

    VB.NET-Quellcode

    1. Dim brush1 As New ImageBrush()
    2. brush1.ImageSource = New BitmapImage(New Uri("ms-appx:///assets/Logo2.png"))
    3. Button1.Background = brush1


    Irgendwie bin ich vom diesem Thread verwirrter als zuvor. 8|
    naja - ich würd sagen, es geht so:

    XML-Quellcode

    1. <ItemsControl ItemsSource="{Binding Path=SpecialFolderCommands}" >
    2. <ItemsControl.ItemTemplate>
    3. <DataTemplate>
    4. <Button Command="{Binding Path=Command}" >
    5. <Button.Background>
    6. <ImageBrush ImageSource="{Binding Path=Image}" />
    7. </Button.Background>
    8. <TextBlock HorizontalAlignment="Center" Text="{Binding Path=Caption}"/>
    9. </Button>
    10. </DataTemplate>
    11. </ItemsControl.ItemTemplate>
    12. </ItemsControl>
    Dazu gehört ein Viewmodel mit einer SpecialFolderCommands - Property As ObservableCollection(Of SpecialFolderCommand)
    Und eine ViewmodelKlasse SpecialFolderCommand, die die Properties Command As ICommand, Image As ImageSource und Caption As String bereitstellt.

    Dann habe ich anne Controls nix zu fummeln, sondern ändere ich im mw. 3. Element der ObservableCollection die ImageSource, dann zeigt der 3.Button auffe Oberfläche ein anneres Bildle - weiler entsprechend gebunden ist.