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) に設定する ため、実行したことは機能しません。

そして、四角形には 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 に答える