2016-10-25 6 views
0

Als Anfänger in WPF, ich versuche, eine bestimmte Benutzerkontrolle in meiner Mainwindow Ansicht Komponente in WPF wieder zu verwenden mehrmals mit verschiedenen EigenschaftenReusing WPF Benutzersteuerelemente in Mainwindow

Die Usercontrol FILE enthält ein einfaches Layout der enthält eine Schaltfläche, die ein Bild mit einem Textfeldfeld enthält. In meiner Hauptform plane ich, dieses Benutzersteuerelement mehrere Male zu verwenden. d.h. mit verschiedenen Bildern.

fileselector

Um die Bild vom MainWindow.xaml stelle ich eine DependencyProperty innerhalb des Usercontrol-Code erstellt haben, die mir das Image File Eigenschaft festlegen können.

public partial class FileSelectionView : UserControl 
    { 
     public string GetFileSelectImage(DependencyObject obj) 
     { 
      return (string)obj.GetValue(FileSelectImageProperty); 
     } 

     public void SetFileSelectImage(DependencyObject obj, string value) 
     { 
      obj.SetValue(FileSelectImageProperty, value); 
     } 

     // Using a DependencyProperty as the backing store for FileSelectImage. This enables animation, styling, binding, etc... 
     public static readonly DependencyProperty FileSelectImageProperty = 
      DependencyProperty.RegisterAttached("FileSelectImage", typeof(string), typeof(FileSelectionView), new PropertyMetadata("flash.png", OnImageFileChanged)); 

     private static void OnImageFileChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
      if (DesignerProperties.GetIsInDesignMode(d)) return; 

      FileSelectionView fv = ((FileSelectionView)(FrameworkElement)d); 
      if (fv != null) 
      { 
       Image tb = (Image)fv.imgButtonFileSelect; 

       //Image tb = ((System.Windows.Controls.Image)(FrameworkElement)d); 
       //var imageConverter = new ImageSourceConverter(); 
       if (tb != null) 
       { 
        tb.Source = new BitmapImage(new Uri("Images\\" + (string)e.NewValue, UriKind.Relative)); 
       } 
      } 
     } 

     public FileSelectionView() 
     { 
      InitializeComponent(); 
     } 
    } 

Jetzt, wo das Bild ist Eigentum ausgesetzt ist, nehme ich an, dass es über MainWindow.xaml

eingestellt werden kann
<StackPanel Orientation="Vertical" Grid.Column="0" Grid.ColumnSpan="2"> 
     <View:FileSelectionView FileSelectImage="image01.png"/> 
     <View:FileSelectionView FileSelectImage="image02.png"/> 
     .. so on 
</StackPanel> 

Ich bin in diesem Zustand fest. Wie stelle ich diese Abhängigkeitseigenschaft (usercontrol) MainWindow.xaml zur Verfügung?

+0

keine angebracht DP machen, verwenden Sie 'DependencyProperty.Register' und auch eine gemeinsame Wrapper Eigenschaft' FileSelectImage' (2 statische get/set-Methoden wäre schaffen nicht notwendig). Siehe auch http://stackoverflow.com/documentation/wpf/2914/dependency-properties#t=201610250847452829325 – ASh

Antwort

1

Diese Eigenschaft ist eine schreibgeschützte Abhängigkeitseigenschaft. Sie müssen CLR-Wrapper hier für diese Eigenschaft dh

public string FileSelectImage 
{ 
    get { return (string)GetValue(FileSelectImageProperty); } 
    set { SetValue(FileSelectImageProperty, value); } 
} 
+0

Sollte ich dies in meine UserControl-Klasse aufnehmen? –

+0

Ja..Sie müssen dies in die Klasse einschließen, in der die Abhängigkeitseigenschaft im aktuellen Kontext Benutzerkontrolle ist. –

+0

Wie greife ich auf diese Eigenschaft von der MainWindow.xaml, Wenn ich diese Eigenschaft verweisen Ich bekomme "Mitglied nicht zugänglich oder nicht erkannt" Fehler –

Verwandte Themen