1

我需要对我的 Windows Phone 应用程序进行数字控制。

我尝试创建自定义控件,但无法将控件的属性绑定到控件的元素。

我在控件中添加了一个依赖属性

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>

但它不起作用。在哪里可以将该属性绑定到元素的属性?

4

2 回答 2

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 上,所以如果它不是 100% 可编译的,那就适用吧!但是给你一个大致的想法。

于 2012-11-03T11:42:43.470 回答
0

您所做的将不起作用,因为RelativeSource={RelativeSource Self}将源设置为目标对象,在您的情况下是 Rectangle 。

而且由于 rectangle 没有 LineThickness 属性,绑定失败。

要获得正确的绑定,您可以做几件事。

更可取的方法可能是this.DataContext = this;在您的 UserControl 构造函数中设置,然后像Width="{Binding LineThickness}"在 XAML 中一样简单地设置绑定。

或者,如果您不想设置 Datacontext,您可以定位最接近的 UserControl 类型的元素并在该元素上找到属性:

Width="{Binding LineThickness, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"  

更新
您也可以简单地给 UserControl 一个名称,并在绑定中使用 ElementName 属性引用它:

<UserControl x:Name="uc1" ... </UserControl>

Width="{Binding LineThickness, ElementName=uc1}"
于 2012-11-03T10:04:15.407 回答