2017-08-16 18 views
1

アイコンをComboBox.ItemTemplateに追加すると、私は奇妙な動作をしています。 最初にアイテムをロードした後、すべてのアイテムに対応するアイコンが表示されますが、アイテムを1つ選択するとアイコンがコンボパートに表示されますが、エクスパンダパートでは表示されなくなります。Mahapps WPF - コンボボックスバインドでの不思議な動作

You can see the problem here (imgur) enter image description here

私はWPF/C#で経験していないよ、私はアイテムやComboBox.ItemTemplateを結合てる途中に何か問題はありますか? help.-

XAMLコード

<ComboBox x:Name="comboBox" HorizontalAlignment="Left" Height="32" Margin="60,47,0,0" VerticalAlignment="Top" Width="282" ItemsSource="{Binding OtherTasks}" > 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <DockPanel Margin="0" Height="30"> 
        <ContentControl Content="{Binding Path=Icono}" Margin="0,4,0,0" Background="Yellow" Width="16" Height="16" Visibility="Visible"/> 
        <AccessText HorizontalAlignment="Stretch" Margin="3,4,0,0" Text="{Binding Path=Text}" TextAlignment="Left" Width="Auto" /> 
       </DockPanel> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

CSコード

namespace test___icon { 
    public partial class MainWindow : MetroWindow { 

     public class CLASS_OTHERTASKS { 
      public string Text { get; set; } 
      public object Icono { get; set; } 
     } 

     public List<CLASS_OTHERTASKS> OtherTasks { get; set; } 

     public MainWindow() { 
      OtherTasks = new List<CLASS_OTHERTASKS>(); 
      OtherTasks.Add(new CLASS_OTHERTASKS() { Text = "Test Air", Icono = new PackIconEntypo() { Kind = PackIconEntypoKind.Air } }); 
      OtherTasks.Add(new CLASS_OTHERTASKS() { Text = "Test Account", Icono = new PackIconMaterial() { Kind = PackIconMaterialKind.Account } }); 
      OtherTasks.Add(new CLASS_OTHERTASKS() { Text = "Test AxisThree", Icono = new PackIconModern() { Kind = PackIconModernKind.AxisThree } }); 

      InitializeComponent(); 
      this.DataContext = this; 
     } 
    } 
} 

答えて

0

制御のための多くは、唯一のビジュアルツリーに一度に表示することができ

感謝データバインドされたプロパティからコントロールを返すことは、非常に良いアイデア。ビジュアルコントロールをXAMLマークアップで定義する方がよいでしょう。

<ComboBox x:Name="comboBox" ItemsSource="{Binding OtherTasks}" > 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <DockPanel Margin="0" Height="30"> 
       <ContentControl x:Shared="False" Content="{Binding}" Margin="0,4,0,0" Background="Yellow" Width="16" Height="16" Visibility="Visible"> 
        <ContentControl.Style> 
         <Style TargetType="ContentControl"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding Text}" Value="Test Air"> 
            <Setter Property="ContentTemplate"> 
             <Setter.Value> 
              <DataTemplate> 
               <iconPacks:PackIconEntypo Kind="Air" /> 
              </DataTemplate> 
             </Setter.Value> 
            </Setter> 
           </DataTrigger> 
           <DataTrigger Binding="{Binding Text}" Value="Test Account"> 
            <Setter Property="ContentTemplate"> 
             <Setter.Value> 
              <DataTemplate> 
               <iconPacks:PackIconMaterial Kind="Account" /> 
              </DataTemplate> 
             </Setter.Value> 
            </Setter> 
           </DataTrigger> 
           <DataTrigger Binding="{Binding Text}" Value="Test AxisThree"> 
            <Setter Property="ContentTemplate"> 
             <Setter.Value> 
              <DataTemplate> 
               <iconPacks:PackIconModern Kind="AxisThree" /> 
              </DataTemplate> 
             </Setter.Value> 
            </Setter> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </ContentControl.Style> 
       </ContentControl> 
       <AccessText HorizontalAlignment="Stretch" Margin="3,4,0,0" Text="{Binding Path=Text}" TextAlignment="Left" Width="Auto" /> 
      </DockPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 
+0

答えていただきありがとうございます。カスタムクラスCLASS_OTHERTASKSとあなたが投稿したDatatriggersにいくつかの修正を加えました。問題を解決できました。 – Capis

関連する問題