如何解决用户控件上的数据绑定仅部分工作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中对我有用,呵呵)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。