그래서 ColoredTextBlock이라고하는 Windows Phone 7 응용 프로그램에 대한 사용자 지정 사용자 정의 컨트롤을 만들려고합니다. 당신은 아마 그것이 무엇을하는지 짐작할 수 있습니다.WP7에서 사용자 지정 사용자 정의 컨트롤의 속성에 바인딩하는 문제
어쨌든 ColoredTextBlock에는 사용자가 텍스트 및 스타일을 설정할 수있게하려는 TextBlock이 있습니다. 난 그냥 같은 단지 통과 간단한 속성을 만드는 시도 할 경우
는 :
public string Text
{
get { return Label.Text; }
set
{
Label.Text = value;
NotifyPropertyChanged("Text");
}
}
그것은 매우 비밀 ArgumentException이 발생합니다. 그러나 입력 텍스트를 설정하면 다음과 같습니다.
<MyRepresentative:ColoredTextBlock Text="Some Text" BackgroundColor="Red" />
모든 것이 정확히 예상대로 작동합니다.
반면에 종속성 속성을 사용하고 내부 TextBlock을이 속성에 바인딩 한 다음이 속성에 외부 데이터를 바인딩하는 고급 경로를 사용하면 아무 것도 표시되지 않습니다.
public string Text
{
get { return (string)GetValue(TextProperty); }
set
{
SetValue(TextProperty, value);
NotifyPropertyChanged("Label");
}
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(ColoredTextBlock), null);
텍스트를 수동으로 삽입하면 다시 작동합니다. 여기
내 사용자 지정 컨트롤의 XAML의 :<UserControl
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"
x:Class="MyRepresentative.ColoredTextBlock"
d:DesignWidth="456" d:DesignHeight="43"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid x:Name="LayoutRoot" Background="Transparent">
<Rectangle Stroke="Black">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="{Binding DimBackgroundColor}" Offset="0"/>
<GradientStop Color="{Binding BrightBackgroundColor}" Offset="0.85"/>
<GradientStop Color="{Binding BrightBackgroundColor}" Offset="0.15"/>
<GradientStop Color="{Binding DimBackgroundColor}" Offset="1"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<TextBlock Text="{Binding Text}" Margin="5,0" d:LayoutOverrides="Width"/>
</Grid>
</UserControl>
나는 오늘의 좋은 부분이 내 머리를 건 드리는 등 다양한 기사를보고 있었고, 나는 전혀 확신 이 점은 내가 뭔가 부족한 것을 놓치고 있지만, 나는 그것을 찾을 수 없다.
UPDATE 1은 : 더 그것으로보고 한 후, 어떤 이유로 내가 바인딩을 설정하더라도, 적어도 지금까지 내가 말할 수있는,이 실제로 설정되고 있음을 표시하지 않는 것 같습니다 .
업데이트 2 : 내 DataContext가 올바르게 설정되었는지 확인하는 방법에 대한 설명을 받았습니다. 예, 이것은 제가 처음 생각한 것 중 하나였습니다. 내 xaml에 아래 줄이 있습니다. 내가 Text="Some text"
같은 것으로 변경하지 않는 한
<MyRepresentative:ColoredTextBlock Text="{Binding Title}" BackgroundColor="Red" />
<TextBlock Text="{Binding Title}" Style="{StaticResource PhoneTextLargeStyle}" />
그래서 첫 번째 요소는 (전혀) 표시되지 않습니다. 두 번째 요소는 오류없이 완벽하게 작동합니다.
DataContext를 설정할 위치에 코드를 포함하지 않았습니다 ({Binding}이 작동하도록). 또한 잘못된 부동산 이름에 대해 통보하고 있습니까? ("Text"라는 속성에서 NotifyPropertyChanged ("Label") 호출) –
안녕하세요 Shahar, 위의 업데이트에서 귀하의 의견을 언급하려했습니다. 그 이름의 문제는 그것이 작동하도록하기 위해 여러 가지 다른 것들을 시도했기 때문입니다. 그러나 나는 그들이 지금 일관성이 있었는지 확인했다. –
나는 당신의 통제 안에있는 귀하의 데이터 중심을 의미했습니다. 당신은 정상에 자신을 추천 -하지만 작동하는 샘플 코드에서 "제목"에 바인딩하고 컨트롤에서 "텍스트"에 바인딩합니다 –