2017-08-16 43 views
1

我有一个奇怪的行为,当我添加图标到ComboBox.ItemTemplate。 最初加载项目后,所有项目都显示其相应的图标,但是当我选择一个项目时,图标将显示在组合部件中,但将在扩展器部件中消失。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,并能解决problem.- – Capis