FrameworkElementFactory“忽略”父资源(例如样式)

发布于 2024-08-11 00:09:09 字数 1732 浏览 4 评论 0原文

我正在尝试创建一些自定义树视图。到目前为止一切都工作正常,但我在样式方面遇到了一些问题。我有一个简单的“RedBackground”样式,我将其添加到窗口的资源中。当添加普通元素时,它工作得很好。

当使用自定义项目模板呈现树视图项目时,我的资源被忽略。如果我将资源直接添加到模板中,它可以正常工作(如代码中标记的那样)...

我显然不想将样式直接添加到 ItemTemplate 中,这在进一步的开发中会非常复杂。我认为我缺少某种“绑定”或“查找”...我认为它与依赖属性相关...或者这个方向的东西。

也许任何人都有更多的见解,这里是创建模板的代码(在 util 类中,但这只是为了保持所有干净):

 var hdt = new HierarchicalDataTemplate(t)
                      {
                          ItemsSource = new Binding("Children")
                      };

        var tb = new FrameworkElementFactory(typeof (TextBlock));
        tb.SetBinding(TextBlock.TextProperty, new Binding("Header"));

        hdt.VisualTree = tb;

        // This way it works...
        TextBlockStyles.AddRedBackground(hdt.Resources);

        return hdt;

这里是我非常简单的自定义树视图

    public class TreeViewCustom<T> : TreeView 
{
    public TreeViewCustom()
    {
        MinWidth = 300;
        MinHeight = 600;

        ItemTemplate = TreeViewTemplates.TryGetTemplate(typeof(T));

        // This is ignored.... (Also when set as resource to window)
        TextBlockStyles.AddRedBackground(Resources);
    }
}

好的,可以肯定的是,这里是创建样式的代码:

public static class TextBlockStyles
{
    public static void AddRedBackground(ResourceDictionary r)
    {
        var s = CreateRedBackground();
        r.Add(s.TargetType, s);
    }


    private static Style CreateRedBackground()
    {
        var s = new Style(typeof(TextBlock));

        s.Setters.Add(new Setter
        {
            Property = TextBlock.BackgroundProperty,
            Value = new SolidColorBrush(Colors.Red)
        });

        return s;
    }

}

感谢您的任何提示... 克里斯

I am trying to create some custom treeviews. Everything is working fine so far, but I got a little problem with styles. I have a simple "RedBackground" Style which I add to the resources of the Window. When adding normal elements, it works fine.

When using a custom item template to render treeview items, my resource is ignored. If I add the resource directly to the template it works fine (as marked in code)...

I obviously do not want to have to add styles to the ItemTemplate direclty, would be very complicated in further development. I think I am missing some kind of "Binding" or "Lookup"... I think it is related to dependency properties... Or something in this direction.

Perhaps anyone has more insights, here is the code creating the template (inside util class, but thats just to keep all clean):

 var hdt = new HierarchicalDataTemplate(t)
                      {
                          ItemsSource = new Binding("Children")
                      };

        var tb = new FrameworkElementFactory(typeof (TextBlock));
        tb.SetBinding(TextBlock.TextProperty, new Binding("Header"));

        hdt.VisualTree = tb;

        // This way it works...
        TextBlockStyles.AddRedBackground(hdt.Resources);

        return hdt;

And here my very simple custom tree view

    public class TreeViewCustom<T> : TreeView 
{
    public TreeViewCustom()
    {
        MinWidth = 300;
        MinHeight = 600;

        ItemTemplate = TreeViewTemplates.TryGetTemplate(typeof(T));

        // This is ignored.... (Also when set as resource to window)
        TextBlockStyles.AddRedBackground(Resources);
    }
}

Ok, and to be sure, here the code which creates the Style:

public static class TextBlockStyles
{
    public static void AddRedBackground(ResourceDictionary r)
    {
        var s = CreateRedBackground();
        r.Add(s.TargetType, s);
    }


    private static Style CreateRedBackground()
    {
        var s = new Style(typeof(TextBlock));

        s.Setters.Add(new Setter
        {
            Property = TextBlock.BackgroundProperty,
            Value = new SolidColorBrush(Colors.Red)
        });

        return s;
    }

}

Thanks for any tips...
Chris

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

书间行客 2024-08-18 00:09:09

这是“继承”的问题吗?并非所有属性都会被继承,请在此处阅读更多信息:

属性值继承:http:// msdn.microsoft.com/en-us/library/ms753197.aspx

Is this a problem with "inheritance"? Not all properties are inherited, read more here:

Property Value Inheritance: http://msdn.microsoft.com/en-us/library/ms753197.aspx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文