none
VB.Net den SmallImageSource von WPF ändern RRS feed

  • Frage

  • Hallo

    Wie kann man das SmallImageSource in Code ändern?

    Code im WPF

    <RibbonButton x:Name="Ribbon_Button1"
                                  Content="Test Button"
                                  SmallImageSource="Images/Bild1.png"/>

    in im VB.Net

    Ribbon_Button1.SmallImageSource = "Bild2.png"

    Leider funktioniert das so nicht. Wie kann man diese Lösen?

    Freitag, 27. März 2020 11:54

Antworten

  • ich hab es kürzer raus gefunden.

    mir hat nur das pack://application:,,,/ gefehlt

    so funktioniert es super

    Ribbon_Button1.SmallImageSource = New BitmapImage(New Uri("pack://application:,,,/Bild2.png"))

    Danke für die Hilfe

    • Als Antwort markiert Mattes80 Mittwoch, 1. April 2020 20:49
    Mittwoch, 1. April 2020 19:55

Alle Antworten

  • Hi,
    wie wäre es damit?

        Ribbon_Button1.SmallImageSource = New BitmapImage(New Uri("Bild2.png"))


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Freitag, 27. März 2020 13:50
  • Hallo

    Danke für deine Antwort

    Das Problem ist das die Bilder die in Projektmappen-Explorer drin sind nicht in Bin/Debug sind und somit kann er das Bild nicht finden. 

    Das finde ich auch gut so das die Bilder auch nicht angezeigt wird.

    Aber wie kann man auf die Bilder dann zugreifen?

    Samstag, 28. März 2020 08:33
  • Hi,
    nachfolgend eine Demo in VB.NET und MVVM. Einfach alles in ein leeres Projekt kopieren und dann mit Button-Klick Bild aus Dateisystem auswählen.

    XAML:

    <Window x:Class="MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp1"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800">
      <Window.DataContext>
        <local:ViewModel/>
      </Window.DataContext>
      <StackPanel>
        <RibbonButton Content="Test Button"
                      SmallImageSource="{Binding Bild}"/>
        <Button Content="Bild laden" Command="{Binding Cmd}"/>
      </StackPanel>
    </Window>

    Und die genutzten Klassen:

    Imports System.ComponentModel
    Imports System.Runtime.CompilerServices
    Imports Microsoft.Win32
    
    Public Class ViewModel
      Implements INotifyPropertyChanged
      Public Property Bild As ImageSource
    
      Public Property Cmd As ICommand = New RelayCommand(Sub(state)
                                                           Dim ofd As New OpenFileDialog
                                                           If ofd.ShowDialog Then
                                                             Try
                                                               Bild = New BitmapImage(New Uri(ofd.FileName))
                                                               OnPropChanged(NameOf(Bild))
                                                             Catch ex As Exception
                                                               MsgBox(ex.Message)
                                                             End Try
                                                           End If
                                                         End Sub)
    #Region " PropertyChanged"
      Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
      Friend Sub OnPropChanged(<CallerMemberName> Optional propName As String = "")
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
      End Sub
    #End Region
    End Class
    
    ''' <summary>
    ''' Eine das ICommand-Interface implementierende Klasse, deren Ziel es ist,
    ''' über Delegates die Funktionalität an andere Objekte zu übertragen.
    ''' CanExecute ist standardmäßig "True".
    ''' </summary>
    Public Class RelayCommand
      Implements ICommand
    
    #Region "Fields"
    
      ' der Delegate, der auszuführen ist
      Private ReadOnly _execute As Action(Of Object)
    
      Private ReadOnly _canExecute As Predicate(Of Object)
    
    #End Region ' Fields
    
    #Region "Constructors"
    
      ''' <summary>
      ''' Neuen Befehl (Command) erzeugen, der immer ausgefühert werden kann
      ''' </summary>
      ''' <param name="execute">The execution logic.</param>
      Public Sub New(ByVal execute As Action(Of Object))
        Me.New(execute, Nothing)
      End Sub
    
      ''' <summary>
      ''' Neuen Befehl (Command) erzeugen mit zum Befehl gehörenden Methoden,
      ''' die die dazugehörenden Kriterien prüfen 
      ''' </summary>
      ''' <param name="execute">The execution logic.</param>
      ''' <param name="canExecute">The execution status logic.</param>
      Public Sub New(ByVal execute As Action(Of Object), ByVal canExecute As Predicate(Of Object))
        If execute Is Nothing Then Throw New ArgumentNullException("execute")
        Me._execute = execute
        Me._canExecute = canExecute
      End Sub
    
    #End Region ' Constructors
    
    #Region "ICommand Members"
    
      <DebuggerStepThrough()>
      Public Function CanExecute(ByVal parameter As Object) As Boolean Implements ICommand.CanExecute
        ' ohne Kriterien wird True geliefert, sonst werden Kriterien geprüft
        Return If(Me._canExecute Is Nothing, True, Me._canExecute(parameter))
      End Function
    
      Public Custom Event CanExecuteChanged As EventHandler Implements ICommand.CanExecuteChanged
        AddHandler(ByVal value As EventHandler)
          AddHandler CommandManager.RequerySuggested, value
        End AddHandler
        RemoveHandler(ByVal value As EventHandler)
          RemoveHandler CommandManager.RequerySuggested, value
        End RemoveHandler
        RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
        End RaiseEvent
      End Event
    
      Public Sub Execute(ByVal parameter As Object) Implements ICommand.Execute
        Me._execute(parameter)
      End Sub
    
    #End Region ' ICommand Members
    
    End Class


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Samstag, 28. März 2020 14:15
  • ich hab es kürzer raus gefunden.

    mir hat nur das pack://application:,,,/ gefehlt

    so funktioniert es super

    Ribbon_Button1.SmallImageSource = New BitmapImage(New Uri("pack://application:,,,/Bild2.png"))

    Danke für die Hilfe

    • Als Antwort markiert Mattes80 Mittwoch, 1. April 2020 20:49
    Mittwoch, 1. April 2020 19:55