用户控件上的数据绑定仅部分工作silverlight

问题描述

| 我不确定我在做什么错。昨晚我花了一个小时来弄清楚,也许我只是傻瓜。 我创建了此用户控件来显示带边框的文本,该文本使用数据绑定来填充样式和文本。 这是我从主页上称呼它的方式:
<mynamespace:BorderedText x:Name=\"DateTime\"
                   Grid.Column=\"1\"
                   Grid.Row=\"0\"
                   BorderStyle=\"{StaticResource borderStyle}\"
                   LabelStyle=\"{StaticResource labelStyle}\"
                   TextStyle=\"{StaticResource valueStyle}\"
                   Label=\"Current Date/Time\"                                           
                   Text=\"N/A\" />
该控件非常简单:
<UserControl x:Class=\"MyNamespace.BorderedText\"
         xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"
         xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"
         xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"
         xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"
         mc:Ignorable=\"d\"
         d:DesignHeight=\"480\"
         d:DesignWidth=\"480\">

<Grid>
    <Border Name=\"border\" Style=\"{Binding BorderStyle}\">
        <StackPanel>
            <TextBlock Style=\"{Binding LabelStyle}\"
                       Text=\"{Binding Label}\" />
            <TextBlock Style=\"{Binding TextStyle}\"
                       Text=\"{Binding Text}\" />
        </StackPanel>
    </Border>
</Grid>
问题在于,除了“边框”数据绑定外,所有数据绑定均有效。我还尝试将数据绑定到背景或任何其他属性,但没有成功。 后面的代码已经设置了DependencyProperty属性,就是这样。请注意,用于数据绑定的DataContext是在构造函数中设置的。试图将其分配给网格或边框本身,但没有成功。 有人有任何线索或看到我在这里缺少的重大东西吗?
namespace MyNamespace
{
    public partial class BorderedText : UserControl
    {
        public static readonly DependencyProperty LabelProperty = DependencyProperty.Register(\"Label\",typeof(string),typeof(BorderedText),new PropertyMetadata(null));

        public static readonly DependencyProperty LabelStyleProperty = DependencyProperty.Register(\"LabelStyle\",typeof(Style),new PropertyMetadata(null));

        public static readonly DependencyProperty TextProperty = DependencyProperty.Register(\"Text\",new PropertyMetadata(null));

        public static readonly DependencyProperty TextStyleProperty = DependencyProperty.Register(\"TextStyle\",new PropertyMetadata(null));

        public static readonly DependencyProperty BorderStyleProperty = DependencyProperty.Register(\"BorderStyle\",new PropertyMetadata(null));

        public BorderedText()
        {
            InitializeComponent();
            ((Grid)this.Content).DataContext = this;
            //((Border)this.Content).DataContext = this;
        }

        public string Label
        {
            set { SetValue(LabelProperty,value); }
            get { return (string)GetValue(LabelProperty); }
        }

        public Style LabelStyle
        {
            set { SetValue(LabelStyleProperty,value); }
            get { return (Style)GetValue(LabelStyleProperty); }
        }

        public string Text
        {
            set { SetValue(TextProperty,value); }
            get { return (string)GetValue(TextProperty); }
        }

        public Style TextStyle
        {
            set { SetValue(TextStyleProperty,value); }
            get { return (Style)GetValue(TextStyleProperty); }
        }

        public Style BorderStyle
        {
            set { SetValue(BorderStyleProperty,value); }
            get { return (Style)GetValue(BorderStyleProperty); }
        }
    }
}
----更新: 事实证明这是完全不同的,并且与正确绑定的数据绑定无关。 在borderStyle中,我将此语法用于背景属性
        <Setter Property=\"Background\">
            <Setter.Value>
                <SolidColorBrush>
                    <SolidColorBrush.Color>
                        <Color>
                            <Color.A>
                                100
                            </Color.A>
                            <Color.R>#95</Color.R>
                            <Color.B>#ED</Color.B>
                        </Color>
                    </SolidColorBrush.Color>
                </SolidColorBrush>
            </Setter.Value>
        </Setter>
显然适用于设计人员,但不适用于手机。 更改为:
        <Setter Property=\"Background\">
            <Setter.Value>
                <SolidColorBrush Color=\"#649500ED\" />
            </Setter.Value>
        </Setter>
解决了问题     

解决方法

        好吧,您忘记了一件事...边界的DataContext! 给您的UserControl命名,然后您可以将以下内容添加到绑定中:
<TextBox Text=\"{Binding Path=MyText,ElementName=UserControlRoot}\" />
这将起作用(至少在WPF中对我有用,呵呵)