通过绑定访问ResourceDictionary中的条目
本文关键字:ResourceDictionary 绑定 访问 | 更新日期: 2023-09-27 18:01:54
我正在尝试创建一个类似于Windows phone的重音颜色选择系统,所有可用的颜色都显示在正方形网格中。
Mahapps。Metro有一个名为Accent的对象,它有一个名称(字符串),和一个附加到它的资源字典。所以在我的Listbox中,我尝试绑定这些项目。
我的XAML是这样的
<ListBox x:Name="accentChooserBox" ItemsSource="{Binding}" PreviewMouseDoubleClick="accentChooserBox_PreviewMouseDoubleClick" SelectionMode="Single">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel IsItemsHost="True"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Background="{Binding Path=???}" Height="50" Width="50">
<TextBlock Text="{Binding Path=Name}" FontWeight="Light" VerticalAlignment="Bottom"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我想将网格的背景设置为Accent的AccentColor。下面还有一个示例,说明资源词典
的样子<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Color x:Key="HighlightColor">#FF5133AB</Color>
<Color x:Key="AccentColor">#CC6459DF</Color> <--- I want to bind to this
<!--60%-->
<Color x:Key="AccentColor2">#996459DF</Color>
<!--40%-->
<Color x:Key="AccentColor3">#666459DF</Color>
<!--20%-->
<Color x:Key="AccentColor4">#336459DF</Color>
<!-- re-set brushes too -->
<SolidColorBrush x:Key="HighlightBrush" Color="{StaticResource HighlightColor}" />
<SolidColorBrush x:Key="AccentColorBrush" Color="{StaticResource AccentColor}"/>
<SolidColorBrush x:Key="AccentColorBrush2" Color="{StaticResource AccentColor2}"/>
<SolidColorBrush x:Key="AccentColorBrush3" Color="{StaticResource AccentColor3}"/>
<SolidColorBrush x:Key="AccentColorBrush4" Color="{StaticResource AccentColor4}"/>
<SolidColorBrush x:Key="WindowTitleColorBrush" Color="{StaticResource AccentColor}" />
<SolidColorBrush x:Key="AccentSelectedColorBrush" Color="White" />
<LinearGradientBrush x:Key="ProgressBrush" EndPoint="0.001,0.5" StartPoint="1.002,0.5">
<GradientStop Color="{StaticResource HighlightColor}" Offset="0" />
<GradientStop Color="{StaticResource AccentColor3}" Offset="1" />
</LinearGradientBrush>
<SolidColorBrush x:Key="CheckmarkFill" Color="{StaticResource AccentColor}" />
<SolidColorBrush x:Key="RightArrowFill" Color="{StaticResource AccentColor}" />
<Color x:Key="IdealForegroundColor">White</Color>
<SolidColorBrush x:Key="IdealForegroundColorBrush" Color="{StaticResource IdealForegroundColor}"/>
我该如何在Grid的Background属性中写这个呢?我尝试使用Background="{Binding Path=Resources.AccentColor}"
,但没有工作。
如果您将资源字典合并到您的资源中,您可以直接访问它:
<ListBox ...>
<ListBox.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Path/To/YourResourceDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</ListBox.Resources>
然后,使用它:
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Background="{Binding Path=AccentColor}" Height="50" Width="50">