开发者

WPF Binding to plain property - not working

I have a control where I want to bind a colour to plain property in its own class.

But it fails to work ??? any Clues ?

I have this

 public Brush SeperatorColour
    {
        get { return (Brush)GetValue(SeperatorColourProperty); }开发者_JAVA技巧
        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));

And this

    <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>


ElementName=container

implies that you are binding to another XAML element named 'container', you will probably want to bind to some instance of the object with the 'SeperatorColour' property.

If you're not binding to another XAML element, do not add "ElementName" to the binding expression.


You either need to set the name of your control to container:

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

OR use relative binding:

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

Here, instead of MyControl you need to specify type of your control.

In case if it is a custom control and the XAML you've shown is located inside a control template for the control, then you can use TemplateBinding:

Fill="{TemplateBinding SeperatorColour}"


This should work perfectly, if you have correctly set the DataContext for your UserControl -

 <Rectangle Name="MessageSeperator" Height="auto" Width="10" Fill="{Binding Path=SeperatorColour, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"   />

What do you see in Output window on running you application? Was there any data binding error??

To debug your data bindings, please refer - http://bea.stollnitz.com/blog/index.php?s=presentationtrace

0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜