WPF绑定到普通属性 - 不工作

时间:2011-04-06 15:10:45

标签: .net wpf xaml binding

我有一个控件,我想在自己的类中将颜色绑定到plain属性。

但它无法正常工作???任何线索?

我有这个

 public Brush SeperatorColour
    {
        get { return (Brush)GetValue(SeperatorColourProperty); }
        set { SetValue(SeperatorColourProperty, value); }
    }

    // Using a DependencyProperty as the backing store for SeperatorColour.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty SeperatorColourProperty =
        DependencyProperty.Register("SeperatorColour", typeof(Brush), typeof(TycoMessageBarMessage), new UIPropertyMetadata(Brushes.Crimson));

这个

    <StackPanel Orientation="Horizontal" Background="Black" >
    <Rectangle Name="MessageSeperator" Height="auto" Width="10" Fill="{Binding Path=SeperatorColour, ElementName=container, Mode=OneTime}"   />
    <TextBlock Name="MessageText" Text="Hello"  Foreground="White" Margin="5,0" />
</StackPanel>

3 个答案:

答案 0 :(得分:1)

  

的ElementName =容器

暗示您绑定到另一个名为'container'的XAML元素,您可能希望使用'SeperatorColour'属性绑定到该对象的某个实例。

如果您没有绑定到另一个XAML元素,请不要在绑定表达式中添加“ElementName”。

答案 1 :(得分:1)

您需要将控件的名称设置为container

<UserControl xmlns="..."
             x:Name="container">

或使用相对绑定:

Fill="{Binding Path=SeperatorColour, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MyControl}}, Mode=OneTime}"

此处,您需要指定控件的类型,而不是MyControl

如果它是自定义控件并且您显示的XAML位于控件的控件模板中,则可以使用TemplateBinding

Fill="{TemplateBinding SeperatorColour}"

答案 2 :(得分:0)

如果您已正确设置UserControl的DataContext -

,这应该可以正常工作
 <Rectangle Name="MessageSeperator" Height="auto" Width="10" Fill="{Binding Path=SeperatorColour, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"   />

在运行应用程序时,您在“输出”窗口中看到了什么?有没有数据绑定错误?

要调试数据绑定,请参阅 - http://bea.stollnitz.com/blog/index.php?s=presentationtrace