首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在可视树之外绑定数据。数据上下文桥接

在可视树之外绑定数据。数据上下文桥接
EN

Stack Overflow用户
提问于 2011-04-13 09:26:56
回答 1查看 7.7K关注 0票数 8

我试图将动态行为绑定到WPF逻辑树和可视树之外的可视元素。

我的问题是,在(准路径):RadChart.SeriesMapping.LineSeriesDefinition.Appearance.Stroke中给出了RadChart图的颜色。

我最初想将它绑定到XAML中图表数据文本的一个属性。天真地,我刚刚写了一个普通的{绑定PlotBrush}

编译器返回“找不到控制FrameWorkelement”错误。在阅读完之后,我认为这意味着解析层次结构上的数据文本不起作用。因为它的祖先(XAML )除了FrameWorkElement和其他关系之外还有其他类型,而不是内容控件的内容。至少,这是我目前对它的理解。请纠正我。

所以,我找到了"DataContext桥“http://www.codeproject.com/KB/WPF/AttachingVirtualBranches.aspx

简单地说,它是绑定,该框架元素的datacontext属性在运行时将数据文本(而不是继承它的任何数据文本)分配给资源中的FrameWorkElement实例的数据文本。然后使用相同的资源对象实例绑定到您希望“附加”到datacontext继承动态的“分支”的DataContext属性。但这篇文章的作者有幸能够实施观察到的财产的验证规则消费者。SolidColorBrush是密封的,我想要实现一个完整的刷子,甚至使用一个装饰器,这将是相当多的工作。

就我而言,这并不能帮助我做我想做的事,但我“太亲密了”。所以我想知道是否有什么XAML技巧可以帮到我。

代码语言:javascript
复制
<Window.Resources>
    <local:FrameWorkElement x:Key="DataContextBridge"/>
</Window.Resources>

然而,目前还不清楚我是如何利用这一点的。没有任何对象的数据文本应该设置。AppearanceSettings不是FrameWorkElement。

代码语言:javascript
复制
<telerik:SeriesAppearanceSettings>
   <telerik:SeriesAppearanceSettings.Stroke>
       Ok, how do I use the fact that I can access the datacontext here?                                         
   </telerik:SeriesAppearanceSettings.Stroke>
</telerik:SeriesAppearanceSettings>

所以,下一步是我是否可以直接得到画笔对象。我尝试过这样的事情,只是到处乱搞:

.cs:

代码语言:javascript
复制
public class ObservableBrush : FrameworkElement
{
    public Brush Brush
    {
        get { return (Brush) GetValue(BrushProperty); }
        set { SetValue(BrushProperty, value); }
    }

    public static readonly DependencyProperty BrushProperty =
        DependencyProperty.Register("Brush", typeof (Brush), typeof (ObservableBrush), new UIPropertyMetadata(new SolidColorBrush(Colors.Black)));
}

XAML顶部:

代码语言:javascript
复制
<Window.Resources>
    <local:ObservableBrush x:Key="StrokeBrush"/>
</Window.Resources>

内联XAML:

代码语言:javascript
复制
<telerik:SeriesAppearanceSettings.Stroke>
     <Binding Path="Brush">
     <Binding.Source>
          <Binding Source="{StaticResource ResourceKey=StrokeBrush}" Path="DataContext"/>
     </Binding.Source>                                            
     </Binding>                                     
</telerik:SeriesAppearanceSettings.Stroke>

“绑定”不是一个框架元素,"Source“也不是一个依赖属性,因此运行时当然会抱怨。我知道,Brush属性不会返回依赖属性注册中给出的默认值以外的任何内容。

在这个问题上,我第二天就要开始了。我认为我接下来的两次尝试是:*让ObservableBrush成为一个真正的刷子。然后以编程方式设置它(有效地使用标准的动态资源绑定)。我不喜欢这个。我想让数据库工作。*用电刷代替DATACONTEXT。

XAML部分工作正常:

代码语言:javascript
复制
<telerik:SeriesAppearanceSettings.Stroke>
     <Binding Source="{StaticResource ResourceKey=StrokeBrush}" Path="Brush"/>
</telerik:SeriesAppearanceSettings.Stroke>

但是,我如何将刷子绑定到DataContext属性?我是否可以在ObservableBrush中使用一些覆盖来动态地跟踪数据文本中的画笔?

如何在树中创建一个假的可视元素,然后将两个绑定关联到它?

代码语言:javascript
复制
<!-- Within the visual tree scope -->
<SomeFrameWorkElementType>
     <SomeFrameWorkElemetType.SomeBrushProp>
         <Binding Source="{StaticResource ResourceKey=StrokeBrush}" Path="Brush" Mode="OneWayToSource"/>
         <Binding Stroke/>
     </SomeFrameWorkElemetType.SomeBrushProp>
<SomeFrameWorkElementType>

这将以某种方式“连接”这两个绑定?

或者,对于这类功能,是否有一些官方的“助手类”?

还是我找错了树,更好的办法是通过动态资源绑定在代码隐藏中解决这个问题?

对于如何继续这件事,有什么想法或看法吗?除了我明显的自毁性外,我坚持在动态资源应该解决这一问题时对其进行绑定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-13 10:03:08

你在那里找到了乔希·史密斯的一篇好文章,但这篇文章有点过时。大约一年后,同一个人写了一篇更好的文章,涵盖了几乎相同的问题,但有更好的答案:人工继承语境

在那里,他使用了类DataContextSpy,尽管我仍然不完全理解您想要完成的任务,但我将尝试向您展示如何使用它:

代码语言:javascript
复制
<Grid><!-- this is some container where its DataContext has the PlotBrush Property-->
    <Grid.Resources>
        <spy:DataContextSpy x:Key="Spy"/>
    </Grid.Resources>
    <telerik:thisIsYourControl>
        <telerik:SeriesAppearanceSettings.Stroke>
             <Binding Source="{StaticResource Spy}" Path="DataContext.PlotBrush"/>
        </telerik:SeriesAppearanceSettings.Stroke>
    </telerik:thisIsYourControl>
<Grid>

我希望这对你有帮助,也对你有用。我以前没有使用过telerik控件,这就是为什么我不能编写完整的示例,仍然希望这包括在内。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5647055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档