2016-04-14 18 views
0

Bunun mümkün olup olmadığından emin değilim, bu yüzden sizin için bir kod örneğim yok. temelde enum değerine dayalı belirli bir denetim eklemek için xaml değiştirip değiştiremeyeceğimi görmek istiyorum. Aşağıdaki sodo kodu size bir örnek vermek gerektiğini ben bir parçası olarakFarklı denetimleri kaydetmek için xaml anahtarını değiştirin

enum testVariable{ btn = 2, input = 2 } 

xaml temelde

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

ben bir listede enum değişkeni dayalı dinamik bir form girişi kurmak için arıyorum arıyorum yapısı. Eğer, herhangi bir veri geçmek yerine seçiminizi buna dayanarak ve ardından seçime doğru şablonu dönebilirsiniz kendi oluşturursanız

+0

bu öğeler öğeler için örneğin kontrol mı Liste kutusu? –

+0

Sorunuz çok net değil, lütfen xaml'ı koyabilir ya da daha fazlasını uzatabilir misiniz? Listede tek içerik veya öğe görüntülemek istediğiniz gibi mi? – Firoz

cevap

0

Enum değerine bağlı olarak bir veri şablonu seçecek özel bir DataTemplateSelector oluşturabilirsiniz.

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

Bir DataTemplateSelector

aradığınız

örn

kod

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

Bu bağlantı soruyu yanıtlayabilirken, cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak daha iyidir. Bağlantılı sayfa değiştiğinde yalnızca bağlantı yanıtları geçersiz olabilir. - [Yorum Gönder] (/ review/düşük kaliteli mesajlar/12015209) –

+0

maalesef asıl önemli olan, sayfanın büyük çoğunluğunu okumayı gerektiren bir şablon seçiciyi nasıl kullanacaklarını ve bir MSDN bağlantısının nasıl olduğunu anlamaları gerektiğidir. yetim olma olasılığı düşük, ancak buna eklemek istediğim örneği yazmak için zamanım oldu. – MikeT

İlgili konular