在我的XAML中,我可以将ComboBox和多个ComboBoxItem组合成一个静态或动态资源吗?

use*_*331 1 c# wpf xaml combobox

我在XMAL文件中多次出现以下XAML片段.是否可以将ComboBox和ComboBoxItem组合成单个静态或动态资源,以节省空间并简化维护问题?

        <Button>
            <Canvas HorizontalAlignment="Left" VerticalAlignment="Top">
                <ComboBox Width="34" FontSize="13" Margin="0" Padding="2,0,0,0">
                    <ComboBoxItem Content="01"></ComboBoxItem>
                    <ComboBoxItem Content="02"></ComboBoxItem>
                    <ComboBoxItem Content="03"></ComboBoxItem>
                    <ComboBoxItem Content="04"></ComboBoxItem>
                    <ComboBoxItem Content="05"></ComboBoxItem>
                    <ComboBoxItem Content="06"></ComboBoxItem>
                    <ComboBoxItem Content="08"></ComboBoxItem>
                    ....... ALL THE WAY TO 100 Items......                     
                    <ComboBoxItem Content="100"></ComboBoxItem>
                </ComboBox>
            </Canvas>    
        </Button>
Run Code Online (Sandbox Code Playgroud)

Roh*_*ats 6

无需声明如此多的comboboxItem实例.只需声明资源以向您的comboBox提供ItemsSource(您可以使用ObjectDataProvider)

在UserControl,Window或App资源中声明此资源(无论您在何处):

<ObjectDataProvider x:Key="EnumerableRange"
                    xmlns:sys="clr-namespace:System;assembly=mscorlib"
                    xmlns:linq="clr-namespace:System.Linq;assembly=System.Core"
                    ObjectType="{x:Type linq:Enumerable}" MethodName="Range">
     <ObjectDataProvider.MethodParameters>
         <sys:Int32>1</sys:Int32>
         <sys:Int32>100</sys:Int32>
     </ObjectDataProvider.MethodParameters>
 </ObjectDataProvider>
Run Code Online (Sandbox Code Playgroud)

您可以通过设置ItemsSource将其用于多个组合框:

<ComboBox ItemsSource="{Binding Source={StaticResource EnumerableRange}}"/>
Run Code Online (Sandbox Code Playgroud)