2017-10-03 5 views
0

Ich versuche, eine MVVM-Anwendung ohne Verwendung eines MVVM-Framework zu erstellen. Ich habe mein Hauptfenster und viewmodel, ein appcontroller, ein paar Ansichten (UserControl wie allgemein beraten) definiert, die in einem Hauptfenster angezeigt werden, teilen das gleiche Aussehen & Gefühl durch Verwendung von Komposition mit einem anderen usercontrol, die gemeinsamen Stil enthält, so so gut.Share Abhängigkeitseigenschaft zwischen usercontrol

Mein Problem ist: Ich möchte, dass alle meine Ansichten "Objekte" ein paar Abhängigkeitseigenschaften teilen (Titel anzeigen, Hilfe Kontext, etc ...).

Das Problem ist: Sie können nicht den gleichen DP Namen auf mehrere Objekte setzen, können Sie nicht im Entwurfsmodus ändern etwas, das von Usercontrol erbt (VS-Designer scheint nur Fenster, Usercontrol und Seite Objekte zu erkennen)

Ich denke, dass ich hier etwas vermisse, aber nicht den Finger darauf legen kann. Kannst du mir helfen ?

Antwort

0

Endlich durchgekommen.

  • eine Steuer Deklarieren von Usercontrol (nur Cs-Datei, keine XAML) vererben

    public class BaseView : UserControl 
    { 
    
    
        public string Title 
        { 
         get { return (string)GetValue(TitleProperty); } 
         set { SetValue(TitleProperty, value); } 
        } 
    
        // Using a DependencyProperty as the backing store for Title. This enables animation, styling, binding, etc... 
        public static readonly DependencyProperty TitleProperty = 
         DependencyProperty.Register("Title", typeof(string), typeof(BaseView), new PropertyMetadata("New view")); 
    
        public BaseView() 
        { 
    
        } 
    } 
    
  • einen Stil erklären für diese Kontrolle in globalen Ressourcen:

    <Style TargetType="{x:Type views:BaseView}"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type views:BaseView}"> 
           <Border CornerRadius="5" BorderThickness="2"> 
            <Grid Name="RootGrid"> 
             <ContentPresenter></ContentPresenter> 
            </Grid> 
           </Border> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
    </Style> 
    
  • Nachdem Sie können Unterklasse Ihr BaseView-Steuerelement in einem anderen Steuerelement:

    <local:BaseView x:Class="MyNS.NiceView" 
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
          mc:Ignorable="d" 
          Title="My Software" 
          d:DesignHeight="300" d:DesignWidth="300"> 
        <Grid> 
        <StackPanel> 
         <Button>HAAAAhahahaha</Button> 
         <Label>213456789</Label> 
        </StackPanel>   
    </Grid> 
    </local:BaseView> 
    
Verwandte Themen