繁体   English   中英

应用XAML样式后,ComboBox显示名称停止工作

[英]ComboBox Display Name stops working after applying XAML Style

我用Item Source List填充ComboBox

我使用DisplayMemberPath="Name"在下拉菜单中显示项目名称。

当我将自定义XAML ItemContainerStyle应用于ComboBox时,名称显示将停止工作。


没有样式:

没有样式的组合框

使用ItemContainerStyle时:

组合框ItemContainerStyle


组合框

<ComboBox x:Name="cboAudioSampleRate" 
          Style="{DynamicResource ComboBoxBlue}"
          ItemContainerStyle="{DynamicResource ComboBoxBlueItem}" <-- Problem
          ItemsSource="{Binding AudioSampleRate_Items}"
          DisplayMemberPath="Name"
          SelectedValuePath="Name"
          SelectedIndex="{Binding AudioSampleRate_SelectedIndex}"
          SelectedValue="{Binding AudioSampleRate_SelectedItem}"
          IsEnabled="{Binding AudioSampleRate_IsEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
          HorizontalAlignment="Left" 
          VerticalAlignment="Top" 
          Width="105"
          Height="22"
          SelectionChanged="cboAudioSampleRate_SelectionChanged" 
          ToolTip="Audio Sample Rate"
          Grid.Column="2" 
          Grid.Row="6" 
          Margin="0,2,0,0"/>

查看模型

public class AudioSampleRate
{
    public string Name { get; set; }
    public string Frequency { get; set; }
}
public List<AudioSampleRate> _AudioSampleRate_Items = new List<AudioSampleRate>();
public List<AudioSampleRate> AudioSampleRate_Items
{
    get { return _AudioSampleRate_Items; }
    set
    {
        _AudioSampleRate_Items = value;
        OnPropertyChanged("AudioSampleRate_Items");
    }
}

项目来源清单

public static List<ViewModel.AudioSampleRate> sampleRate = new List<ViewModel.AudioSampleRate>()
{
     new ViewModel.AudioSampleRate() { Name = "auto",     Frequency = "" },
     new ViewModel.AudioSampleRate() { Name = "8k",       Frequency = "8000" },
     new ViewModel.AudioSampleRate() { Name = "11.025k",  Frequency = "11025" },
     new ViewModel.AudioSampleRate() { Name = "12k",      Frequency = "12000" },
     new ViewModel.AudioSampleRate() { Name = "16k",      Frequency = "16000" },
     new ViewModel.AudioSampleRate() { Name = "22.05k",   Frequency = "22050" },
     new ViewModel.AudioSampleRate() { Name = "24k",      Frequency = "24000" },
     new ViewModel.AudioSampleRate() { Name = "32k",      Frequency = "32000" },
     new ViewModel.AudioSampleRate() { Name = "44.1k",    Frequency = "44100" },
     new ViewModel.AudioSampleRate() { Name = "48k",      Frequency = "48000" }
};

物品样式

<!-- ComboBox Blue Item -->
<Style x:Key="ComboBoxBlueItem" TargetType="{x:Type ComboBoxItem}">
    <Setter Property="Template" Value="{StaticResource ComboBoxBlue.Item.ControlTemplate}"/>
    <Setter Property="Foreground" Value="#FFFFFFFF" />
    <Setter Property="Background" Value="#FF1049BB" />
    <Setter Property="BorderBrush" Value="#FF1049BB" />
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="true">
            <Setter Property="Background" Value="#FF1049BB" />
        </Trigger>
    </Style.Triggers>
</Style>

我发现您不能同时使用DisplayMemberPath="Name"ItemContainerStyle

解决该问题的一种方法是将Name BindComboBox内的TextBlock

<ComboBox x:Name="cboSampleRate" 
         Style="{DynamicResource ComboBoxBlue}"
         ItemContainerStyle="{DynamicResource ComboBoxBlueItem}" 
         ItemsSource="{Binding AudioSampleRate_Items}"
         SelectedValuePath="Name"
         SelectedIndex="{Binding AudioSampleRate_SelectedIndex}"
         SelectedValue="{Binding AudioSampleRate_SelectedItem}"
         IsEnabled="{Binding AudioSampleRate_IsEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
         HorizontalAlignment="Left" 
         VerticalAlignment="Top" 
         Width="105"
         Height="22"
         SelectionChanged="cboSampleRate_SelectionChanged" 
         ToolTip="Audio Sample Rate"
         Grid.Column="2" 
         Grid.Row="6" 
         Margin="0,2,0,0"
          >
  <ComboBox.ItemTemplate>
      <DataTemplate>
          <Grid>
              <TextBlock Text="{Binding Name}"></TextBlock>
          </Grid>
      </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM