开发者

XAML Resource with static items?

开发者 https://www.devze.com 2023-04-11 02:09 出处:网络
<Window.Resource> <ResourceDictionary> <local:SomeResourceWithObsCollection x:Key=\"MyItemWithCollection\">
<Window.Resource>
    <ResourceDictionary>
        <local:SomeResourceWithObsCollection x:Key="MyItemWithCollection">
            <local:SomeCl开发者_开发问答ass.Instance /> <!-- THIS DOES NOT WORK -->
        </local:SomeResourceWithObsCollection>
    </ResourceDictionary>
</Window.Resources>

I don't know how to get that line to work... I've tried doing <x:Static SomeClass.Instance />, but that also isn't allowed.

[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; } }
}


You can't do what you're asking to do in XAML as of right now. Perhaps future versions of XAML will account for this. You have to do it in the code behind, here is an example:

Adding a static object to a resource dictionary


The closest I can suggest is a combination of the CompositeCollection and using ListBoxItems (or some other equivalent) to wrap your static content (as I believe you can only pull static content into XAML using the {x:Static} markup extension)

This can be used in XAML as below:

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

精彩评论

暂无评论...
验证码 换一张
取 消