通过绑定访问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}",但没有工作。

通过绑定访问ResourceDictionary中的条目

如果您将资源字典合并到您的资源中,您可以直接访问它:

<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">
相关文章:
  • 没有找到相关文章