这个想法很简单:从 RibbonComboBox 中选择一个以秒为单位的时间段并将其保存到应用程序实例属性中。基础数据以毫秒为单位,但组合以秒为单位显示它们。
我的应用程序中的属性以毫秒为单位存储时间:
private int _updatePeriod;
public int UpdatePeriod
{
get { return _updatePeriod; }
set
{
_updatePeriod = value;
InvokePropertyChanged(new PropertyChangedEventArgs("UpdatePeriod"));
}
}
在 XAML 中,我定义了一个可能的选择列表,以毫秒为单位,如下所示:
<x:Array x:Key="UpdateFrequenciesCollection" Type="{x:Type System:Int32}" >
<System:Int32 >100</System:Int32>
<System:Int32 >200</System:Int32>
<System:Int32 >500</System:Int32>
<System:Int32 >1000</System:Int32>
<System:Int32 >2000</System:Int32>
</x:Array >
然后我有一个功能区工具栏组合框设置,如下所示:
<ribbon:RibbonComboBox IsEditable="False" AllowDrop="False" Grid.Column="1" Grid.Row="1" IsDropDownOpen="False">
<ribbon:RibbonGallery x:Name="RibbonGalleryUpdatePeriod" SelectedValue="{Binding Path=UpdatePeriod, Mode=TwoWay, Source={x:Static Application.Current}}">
<ribbon:RibbonGalleryCategory x:Name="RibbonGalleryCategoryUpdatePeriod" ItemTemplate="{StaticResource UpdatePeriodTemplate}" ItemsSource="{Binding Source={StaticResource UpdateFrequenciesCollection}}">
</ribbon:RibbonGalleryCategory>
</ribbon:RibbonGallery>
</ribbon:RibbonComboBox>
这是组合框项目的简单模板:
<DataTemplate x:Key="UpdatePeriodTemplate">
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Converter={StaticResource DivideConverter}, ConverterParameter=1000, StringFormat={}{0:0.0 s}}"/>
</StackPanel>
</DataTemplate>
功能上没问题,因为它在组合框<->UpdatePeriod 中设置并获得正确的值。但是下拉菜单总是有一个红色边框,我认为这表示验证错误。知道什么会导致这种情况,或者我如何以某种方式调试错误?非常感激!