Ресурс XAML со статическими элементами? - PullRequest
0 голосов
/ 07 октября 2011
<Window.Resource>
    <ResourceDictionary>
        <local:SomeResourceWithObsCollection x:Key="MyItemWithCollection">
            <local:SomeClass.Instance /> <!-- THIS DOES NOT WORK -->
        </local:SomeResourceWithObsCollection>
    </ResourceDictionary>
</Window.Resources>

Я не знаю, как заставить эту линию работать ... Я пытался сделать <x:Static SomeClass.Instance />, но это также не разрешено.

[ContentProperty("TheItems")]
public class SomeResourceWithObsCollection
{
    public class SomeResourceWithObsCollection()
    {
        TheItems = new ObservableCollection<IMyInterface>();
    }

    public ObservableCollection<IMyInterface> TheItems { get; set; }
}

public class SomeClass : IMyInterface
{
    private static SomeClass _instance = new SomeClass();

    private SomeClass() { }

    public SomeClass Instance { get { return _instance; } }
}

Ответы [ 2 ]

2 голосов
/ 07 октября 2011

Вы не можете делать то, что вы просите сделать в XAML на данный момент.Возможно, будущие версии XAML будут учитывать это.Вы должны сделать это в приведенном ниже коде, вот пример:

Добавление статического объекта в словарь ресурсов

1 голос
/ 07 октября 2011

Наиболее близким, что я могу предложить, является комбинация CompositeCollection и использование ListBoxItems (или некоторого другого эквивалента) для переноса статического содержимого (так как я считаю, что вы можете извлекать статический контент только в XAML, используя{x:Static} расширение разметки)

Это может использоваться в XAML, как показано ниже:

<ListBox>
    <ListBox.ItemsSource>
        <CompositeCollection>
            <ListBoxItem Content="{x:Static local:Example.One}" />
            <ListBoxItem Content="{x:Static local:Example.Two}" />
        </CompositeCollection>
    </ListBox.ItemsSource>
</ListBox>
...