2016-04-14 5 views
0

Ich bin nicht sicher, ob dies möglich ist, also habe ich kein Code-Beispiel für Sie. im Grunde schaue ich, um zu sehen, ob ich in Xaml wechseln kann, um ein bestimmtes Steuerelement basierend auf Enum-Wert einzufügen. sodo Code unten sollte Ihnen ein Beispiel dessen, was ich sucheschalte in XAML um verschiedene Kontrollen zu registrieren

enum testVariable{ btn = 2, input = 2 } 

XAML

xaml switch binding to testvariable 
     if testvariable = 1 
<button/> 
     if testvaribale = 2 
<textbox/> 

im Grunde Suche Eingang eine dynamische Form auf Enum-Variable in einer Liste als Teil einer Basis zu bauen Struktur.

+0

Ist das für Elemente in einem Artikel steuern z.B. ListBox? –

+0

Sie Frage ist nicht viel klar, können Sie bitte XAML setzen oder explian es mehr. Möchten Sie einzelne Inhalte oder Elemente in der Liste anzeigen? – Firoz

Antwort

0

Sie können einen benutzerdefinierten DataTemplateSelector erstellen, der basierend auf Ihrem Aufzählungswert eine Datenvorlage auswählt.

public class EnumDataTemplateSelector : DataTemplateSelector 
{ 
    public DataTemplate ButtonDataTemplate { get; set; } 
    public DataTemplate InputDataTemplate { get; set; } 

    public override DataTemplate SelectTemplate(object item, 
       DependencyObject container) 
    { 
     var value = (testVariable)item; 

     switch (value) 
     { 
      case testVariable.btn: 
       return ButtonDataTemplate; 
      case testVariable.input: 
       return InputDataTemplate; 
     } 

     return InputDataTemplate; 
    } 
} 

XAML

<Window x:Class="DataTemplates.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:l="clr-namespace:DataTemplates" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib"> 

    <Window.Resources> 

     <!-- DataTemplate for Button --> 
     <DataTemplate x:Key="DefaultDataTemplate"> 
      <Button/> 
     </DataTemplate> 

     <!-- DataTemplate for Input --> 
     <DataTemplate x:Key="InputDataTemplate"> 
      <TextBox/> 
     </DataTemplate> 

     <!-- DataTemplate Selector --> 
     <l:PropertyDataTemplateSelector x:Key="templateSelector" 
       ButtonDataTemplate="{StaticResource ButtonDataTemplate}" 
       InputDataTemplate="{StaticResource InputDataTemplate}"/> 
    </Window.Resources> 
    <Grid> 
     <!--List box--> 
     <ListBox ItemsSource="{Binding}" 
       HorizontalContentAlignment="Stretch" 
       ItemTemplateSelector="{StaticResource templateSelector}"/> 
     <!--Content control--> 
     <ContentControl Content="{Binding}" 
       ContentTemplateSelector="{StaticResource templateSelector}"/> 
    </Grid> 
</Window> 
0

Sie suchen einen DataTemplateSelector

, wenn Sie Ihre eigenen erstellen Sie in allen möglichen Daten passieren können, führen Sie Ihre Auswahl auf der Grundlage dieser und dann wieder die richtige Vorlage für die Wahl

zB

Code
public class CustomTemplateSelector : DataTemplateSelector 
{ 
    DataTemplate Template1{get;set}; 
    DataTemplate Template2{get;set}; 
    DataTemplate Template3{get;set}; 
    DataTemplate Template4{get;set}; 

    public override DataTemplate SelectTemplate(object item, DependencyObject container) 
    { 
     var data = item as YourDataType 
     switch(data.Enum) 
     { 
      case Enum.Value1: 
       return Template1; 
      case Enum.Value2: 
       return Template2; 
      case Enum.Value3: 
       return Template3; 
      case Enum.Value4: 
       return Template4; 
      default: 
       return null; 
     } 
    } 
} 

xAML

<local:CustomeDataTemplate> 
    <local:CustomeDataTemplate.Template1> 
     <DataTemplate> 
      <TextBox /> 
     </DataTemplate> 
    </local:CustomeDataTemplate.Template1> 
    <local:CustomeDataTemplate.Template2> 
     <DataTemplate> 
      <Button/> 
     </DataTemplate> 
    </local:CustomeDataTemplate.Template2> 
</local:CustomeDataTemplate> 
+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Review] (/ review/low-quality-posts/12015209) –

+0

leider ist der wesentliche Teil, dass sie verstehen müssen, wie man einen Template-Selektor verwendet, der das Lesen eines Großteils der Seite erfordert, und wie es ein MSDN-Link ist Es ist unwahrscheinlich, dass ich verwaist bin, aber ich hatte Zeit, das Beispiel zu schreiben, das ich hinzufügen wollte – MikeT

Verwandte Themen