2012-11-03 5 views
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> 

에 바인딩을 시도했지만 작동하지 않습니다. 해당 속성을 요소의 속성에 바인딩하는 방법은 어디에 있습니까?

답변

1

코드 숨김에서 확인하십시오. 뒤에 코드에서 다음

<Rectangle x:Name="theRect" Margin="0" StrokeThickness="0" Fill="#FFFF5454" RadiusX="5" RadiusY="5"/> 

:

는 이름을 설정

비주얼 스튜디오와 PC에서
theRect.SetBinding(Rectangle.WidthProperty, new Binding("LineThickness"){Source = this}); 

하지 않음, applogies 있도록 100 % compileable 아니라면! 그러나 당신에게 일반적인 생각을 제공합니다.

+0

이 방법으로 문제를 해결했습니다. –

0

RelativeSource={RelativeSource Self}은 대상에 대상을 설정하기 때문에 효과가 없습니다.이 경우는 케이스의 사각형입니다.

사각형에 LineThickness 속성이 없으므로 바인딩이 실패합니다.

올바른 바인딩을 얻으려면 여러 가지 작업을 수행 할 수 있습니다.

아마도 가장 좋은 방법은 this.DataContext = this;을 UserControl 생성자에 설정 한 다음 XAML에 Width="{Binding LineThickness}"이라는 바인딩을 설정하는 것입니다.

또는 당신이 데이터 컨텍스트를 설정하는 기분하지 않는 경우는, 형의 UserControl의 가장 가까운 요소를 대상으로하고 하나의 속성을 찾을 수 :
또한 단순히 줄 수

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

업데이트 UserControl 이름, 바인딩의 ElementName 속성을 사용하여 참조하십시오.

<UserControl x:Name="uc1" ... </UserControl> Width="{Binding LineThickness, ElementName=uc1}" 
+0

불행히도 Windows Phone에서 지원하지 않는 FindAncestor를 사용할 수 없습니다. –

+0

그래,하지만 DataContext 솔루션을 사용할 수 있습니까? –

+0

아니, 현재 문제를 해결할 수 있지만 새로운 하나를 많이 태어납니다 –

관련 문제