获取Brushes的ResourceDictionary到ItemsList中

时间:2014-02-13 05:33:10

标签: c# wpf xaml resourcedictionary itemssource

我的项目中定义了许多XAML Brush对象。有些比较详细。现在,它们都位于(EDIT)Brushes.xaml中,在它自己的文件中定义为ResourceDictionary,如下所示:

 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <LinearGradientBrush x:Key="FiveColorGradient"  >
          ...with five gradient stops
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="TwentyFourColorGradient" >
            ...with 24 gradient stops
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="RedYellowGradient" >
            ...etc
        </LinearGradientBrush>
  </ResourceDictionary>

问题是,如何将这些项目加载到ItemsList控件中,例如ComboBox

EDIT )我希望在XAML中利用绑定语法,这将更容易维护。但我没有找到正确的语法。这是我到目前为止所尝试的:

<UserControl.Resources>
    <ResourceDictionary >
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary x:Key="BrushesDictionary" Source="Brushes.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>
<Grid>
    <ComboBox ItemsSource="{StaticResource BrushesDictionary}"/>
</Grid>

当然,这会导致错误,因为您无法将密钥分配给ResourceDictionary或其他内容。

(我已经尝试过查找几个想法,但没有任何文档支持任何未完全隐藏在内容聚合或多年尘埃中的文档......)

2 个答案:

答案 0 :(得分:2)

您可以使用x:Static创建绑定:

<ComboBox.ItemsSource>
          <Binding Path="Resources.Keys" 
                   Source="{x:Static Application.Current}"/>
</ComboBox.ItemsSource>

答案 1 :(得分:0)

我认为你不能使用ResourceDictionary让它工作。但是,使用CompositeCollection内的ResourceDictionary确实有效:

    <CompositeCollection x:Key="Brushes" >
        <LinearGradientBrush />
        <LinearGradientBrush />
        <LinearGradientBrush />
        <LinearGradientBrush />
        <LinearGradientBrush />
    </CompositeCollection>

然后,访问它的XAML如下所示:

    <ComboBox    ItemsSource="{StaticResource Brushes}" HorizontalContentAlignment="Stretch" SelectedIndex="0">
        <ComboBox.ItemTemplate>
            <DataTemplate >
                <Rectangle Height="20" HorizontalAlignment="Stretch"  Fill="{Binding}"/>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>