我的项目中定义了许多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
或其他内容。
(我已经尝试过查找几个想法,但没有任何文档支持任何未完全隐藏在内容聚合或多年尘埃中的文档......)
答案 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>