如果我定义了用户控件:
public partial class MainFooter : UserControl
{
public System.Windows.Media.Color BkColor;
}
Run Code Online (Sandbox Code Playgroud)
它是xaml:
<UserControl x:Class="Test.MainFooter">
<Grid x:Name="LayoutRoot">
<Rectangle x:Name="rctBottom_Background2"
HorizontalAlignment="Stretch"
Grid.Row="2">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.82,0.895" StartPoint="0.911,-0.442">
<GradientStop Color="{**How can I bind this to the BkColor property?}"/**>
<GradientStop Color="#00FFFFFF" Offset="1"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
和使用:
<MyControls:MainFooter x:Name="rcrMainFooter"
BkColor="#FFE2B42A">
</MyControls:MainFooter>
Run Code Online (Sandbox Code Playgroud)
我如何将Rectangle中的GradientStop Color绑定到它的用户控件BkColor属性的值?
通常当我看到这个问题提出答案是'你必须在代码中做',这听起来像'Silverlight绑定不支持这个' - 所以你必须通过设置' 完全手动 ' 来做到这一点手工财产.但事实并非如此:
Silverlight绑定确实支持这一点 - 它只是Silverlight XAML不支持.
这是一个UserControl基本上包装的例子DataForm.在构造函数中,您运行可绑定到"用户控件属性"的绑定.希望如果他们将来更改XAML对此的支持,那么返回并修复它将是微不足道的.
App.xaml中
<AddressControl MyHeader="Shipping Address"/>
Run Code Online (Sandbox Code Playgroud)
AddressControl.xaml
<UserControl>
<DataForm Name="dfAddress" Header="BOUND IN CODE"/>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
可选:表示您已将代码中的值与注释绑定在一起
AddressControl.xaml.cs
publicAddressControl()
{
InitializeComponent();
// bind the HeaderProperty of 'dfAddress' to the 'MyHeader' dependency
// property defined in this file
dfAddress.SetBinding(DataForm.HeaderProperty,
new System.Windows.Data.Binding { Source = this,
Path = new PropertyPath("MyHeader") });
}
// standard string dependency property
public string MyHeader
{
get { return (string)GetValue(MyHeaderProperty); }
set { SetValue(MyHeaderProperty, value); }
}
public static readonly DependencyProperty MyHeaderProperty =
DependencyProperty.Register("MyHeader", typeof(string),
typeof(AddressControl), null);
Run Code Online (Sandbox Code Playgroud)
这会将MyHeader我的AddressControlusercontrol上的Header属性绑定到dataform上的属性.我将它设为"我的"仅仅是为了便于阅读 - 但我实际上在实际代码中只使用了"标题".
真正的耻辱我们仍然不能在XAML中做到这一点,但它比我最初尝试捕获DataContextChanged事件然后手动设置的东西更好.
请查看此博客文章:解决 Silverlight 2.0 Binding 中缺少 ElementName 的问题。听起来它与您想要做的事情有点不同,但是您也许可以调整他的代码来完成您想要的事情。祝你好运!:-)