我需要对我的Windows手机应用程序进行数字控制。
我尝试创建自定义控件但我无法将控件的属性绑定到控件的元素。
我在控件中添加了一个依赖属性
public static readonly DependencyProperty LineThicknessProperty =
DependencyProperty.Register("LineThickness", typeof (double), typeof (DigitControl), new PropertyMetadata(default(double)));
[DefaultValue(10D)]
public double LineThickness
{
get { return (double) GetValue(LineThicknessProperty); }
set { SetValue(LineThicknessProperty, value); }
}
并尝试将其绑定到控件的元素
<UserControl x:Class="Library.DigitControl"
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"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
d:DesignHeight="480" d:DesignWidth="480">
<Grid x:Name="LayoutRoot">
<Rectangle Margin="0" StrokeThickness="0" Width="{Binding LineThickness, RelativeSource={RelativeSource Self}}" Fill="#FFFF5454" RadiusX="5" RadiusY="5"/>
</Grid>
</UserControl>
但它不起作用。是将该属性绑定到元素属性的方法吗?
答案 0 :(得分:1)
在后面的代码中执行。
设置名称:
<Rectangle x:Name="theRect" Margin="0" StrokeThickness="0" Fill="#FFFF5454" RadiusX="5" RadiusY="5"/>
然后在代码背后:
theRect.SetBinding(Rectangle.WidthProperty, new Binding("LineThickness"){Source = this});
不适用于使用Visual Studio的PC,所以applogies如果不是100%可编译的!但是给你一般的想法。
答案 1 :(得分:0)
你做了什么不会工作,因为RelativeSource={RelativeSource Self}
将源设置为目标对象,在你的情况下是矩形。
由于矩形没有LineThickness属性,因此绑定失败。
要获得正确的绑定,您可以执行多项操作。
最好的方法可能是在UserControl构造函数中设置this.DataContext = this;
,然后在XAML中将绑定设置为Width="{Binding LineThickness}"
。
或者你可以定位UserControl类型的最近元素,并在那个上找到属性,如果你不想设置Datacontext:
Width="{Binding LineThickness, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"
<强>更新强>
您还可以简单地为UserControl指定一个名称,并使用绑定中的ElementName属性引用它:
<UserControl x:Name="uc1" ... </UserControl>
Width="{Binding LineThickness, ElementName=uc1}"