W WPF każda kontrolka ma swój domyślny szablon (jak to wygląda), ale można łatwo zmienić te szablony i sprawić, że kontrolki wyglądają tak, jak chcesz. Ułatwia to kontrolę poprzez jej funkcjonalność i sprawia, że wygląda tak, jak chcesz. W twoim przypadku chcesz Click
więc wybrać Button
i zmienić jego Template
<Window ...>
<Window.Resources>
<Style TargetType="{x:Type Button}" x:Key="ImageButtonStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<ContentPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Button Style="{StaticResource ImageButtonStyle}" Click="ImageButton_Click">
<Image Source="..."/>
</Button>
</Window>
Z powyższego XAML Image
będzie swoją Button
EDIT
Poniżej znajdziesz uproszczoną wersję jak bind/change Image.Source
gdzie wszystko jest zrobione w MainWindow, ale w zasadzie w WPF nie manipulujesz kontrolkami, ale wiążę ich właściwości za pomocą Binding
i mani pulować te właściwości. Zwykle tworzysz dedykowaną klasę (ViewModel). Twój klasy trzeba zaimplementować INofityPropertyChanged
interfejs DataContext
musi być odpowiednio ustawiony i mienia związanego musi podnieść INofityPropertyChanged.PropertyChanged
zdarzenie za każdym razem jego wartość zmienia się (jest to w jaki sposób powiadomić UI odświeżyć wartości)
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
private ImageSource _myImageSource;
public ImageSource MyImageSource
{
get { return _myImageSource; }
set
{
_myImageSource = value;
OnPropertyChanged("MyImageSource");
}
}
private void ImageButton_Click(object sender, RoutedEventArgs e)
{
this.MyImageSource = new BitmapImage(...); //you change source of the Image
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
w XAML:
<Button Style="{StaticResource ImageButtonStyle}" Click="ImageButton_Click" Width="..." Height="...">
<Image Source="{Binding MyImageSource}"/>
</Button>
Ponadto, ponieważ używa WPF, może być lepiej, jeśli używa MVVM i zamiast zdarzenia Click używa polecenia. Ale to zależy od tego, co chce osiągnąć. Powiedział, że kliknięcie zrobiło coś ważnego, więc możliwe, że Dowództwo mogłoby lepiej pasować. – Dzyann
Tak więc, bierzemy przycisk i sprawiamy, że wygląda jak obraz. Czy możesz mi pokazać, jak stworzyłeś przyciski tego stylu? Ponadto, czy możliwe jest ustawienie obrazu dla przycisku obrazu z obsługi innego przycisku zamiast XAML? –
Sposób użycia przycisku jest już w moim XAML. Jeśli chodzi o sposób zmiany źródła obrazu, jest on inny niż WinForm. Nie działają na kontrole w WPF. Tworzysz własność ze swoim źródłem obrazu (na przykład typu 'ImageSource'), powiąż ją z' Image.Source' używając 'Binding', a następnie manipulujesz tą właściwością, a nie kontrolą. – dkozl