итерация xaml файла ресурсов - PullRequest
1 голос
/ 27 апреля 2010

Я пытаюсь отобразить количество элементов управления палитры цветов в зависимости от количества цветов в файле ресурсов xaml.

По какой-то причине я не могу найти правильный способ сделать это. При загрузке его через XAMLReader в объект ResourcesDictionary я не уверен, каков наилучший способ его перебора.

Сначала я попытался обработать его как XML, используя XDocument.Elements (), который выдавал пустой IEnumerable при попытке получить все элементы.

Каков наилучший способ сделать это?

пример xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <!-- Edit the FontFamily  value to change the application font-->
    <FontFamily x:Key="NormalFontFamily">Arial</FontFamily>

    <!-- Edit ARGB values (hex) to change the colours used in the application -->
    <Color x:Key="NormalForegroundColor" A="0xFF" R="0xFF" G="0xFF" B="0xFF" />
    <Color x:Key="NormalForegroundColor80" A="0xFF" R="0xB6" G="0xB5" B="0xB5" />
    <Color x:Key="DarkerForegroundColor" A="0xFF" R="0x97" G="0x97" B="0x97" />
    <Color x:Key="DarkestForegroundColor" A="0xFF" R="0x76" G="0x76" B="0x76" />
    <Color x:Key="NormalBackgroundColor" A="0xFF" R="0x22" G="0x22" B="0x22" />
    <Color x:Key="DarkerBackgroundColor" A="0xFF" R="0x19" G="0x19" B="0x19" />
    <Color x:Key="LighterBackgroundColor" A="0xFF" R="0x33" G="0x33" B="0x33" />
     ....

1 Ответ

1 голос
/ 28 апреля 2010

Есть ли причина, по которой вы не можете использовать свои цвета из словаря ресурсов напрямую, как в примере, показанном ниже? Для простоты я показываю «встроенные» ресурсы вместо отдельного файла словаря ресурсов. Зачем вам нужно загружать свой словарь ресурсов в коде?

<Window.Resources>
    <x:Array x:Key="colors" Type="{x:Type Color}">
        <x:Static Member="Colors.White" />
        <x:Static Member="Colors.Red" />
        <x:Static Member="Colors.Green" />
        <x:Static Member="Colors.Blue" />
    </x:Array>
</Window.Resources>

<ListBox ItemsSource="{StaticResource colors}">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Rectangle Width="20" Height="20" Margin="2"
                        Stroke="Black">
                    <Rectangle.Fill>
                        <SolidColorBrush Color="{Binding}" />
                    </Rectangle.Fill>
                </Rectangle>
                <TextBlock Text="{Binding}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Если вам действительно необходимо перечислить ресурсы в коде, тогда я предлагаю вам сослаться на файл ресурсов в вашем XAML и использовать FrameworkElement.FindResource в коде для получения ваших данных. В приведенном выше примере код может выглядеть примерно так:

 var colors = (IEnumerable) FindResource("colors");
 foreach(Color color in colors)
 {
    // Do something here...
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...