2009-05-13 5 views
3

사용자 지정 종속성 속성에 바인딩 할 때 WPF 디자이너를 업데이트하는 데 문제가 있습니다.WPF 디자이너 및 종속성 속성 바인딩 문제

다음 예제에서는 사용자 정의 MyAwesomeFill 속성으로 채울 간단한 타원을 만듭니다. MyAwesomeFill의 기본값은 Yellow SolidColor 브러시입니다.

디자이너의 제어 양식에서 타원의 기본 채우기 (노란색)를 볼 수없는 대신 타원은 SolidColor (# 00000000)로 채워지는 것이 문제입니다. 그러나 응용 프로그램을 실행하면 모든 것이 완벽하게 작동합니다.

왜 이것이 일어 났는지에 대한 아이디어가 있습니까?

감사합니다.

여기 내가 사용하는 코드입니다 :

XAML :

<UserControl x:Class="TestApplication.MyEllipse" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Height="300" Width="300"> 
    <Grid> 
     <Ellipse Stroke="Black" StrokeThickness="5" Fill="{Binding MyAwesomeFill}"></Ellipse> 
    </Grid> 
</UserControl> 

C 번호 : 뒤에 디자이너에 의해 실행되도록 보장되지

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace TestApplication 
{ 
    public partial class MyEllipse : UserControl 
    { 
     #region Dependency property MyAwesomeFill 
     //Define and register dependency property 
     public static readonly DependencyProperty MyAwesomeFillProperty = DependencyProperty.Register(
      "MyAwesomeFill", 
      typeof(Brush), 
      typeof(MyEllipse), 
      new PropertyMetadata(new SolidColorBrush(Colors.Yellow), new PropertyChangedCallback(OnMyAwesomeFillChanged)) 
     ); 

     //property wrapper 
     public Brush MyAwesomeFill 
     { 
      get { return (Brush)GetValue(MyAwesomeFillProperty); } 
      set { SetValue(MyAwesomeFillProperty, value); } 
     } 

     //callback 
     private static void OnMyAwesomeFillChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) 
     { 
      MyEllipse m = (MyEllipse)obj; 
      m.OnMyAwesomeFillChanged(e); 
     } 
     #endregion 

     //callback 
     protected virtual void OnMyAwesomeFillChanged(DependencyPropertyChangedEventArgs e) 
     { 
     } 

     public MyEllipse() 
     { 
      InitializeComponent(); 

      DataContext = this; 
     } 

    } 
} 

답변

3

코드입니다. MyEllipse 컨트롤을 윈도우에 추가하면, 윈도우에서 타원은 노란색 배경입니다.하지만 직접 컨트롤을 볼 때는 그렇지 않습니다. 즉, 귀하의 통제 사용자가 중요한 일을 처리 할 수 ​​있습니다.

디자이너에서 MyEllipse를 열 때 모양이 고치도록 수정하려면 대체 값을 추가하십시오.

<Ellipse 
    Stroke="Black" 
    StrokeThickness="5" 
    Fill="{Binding MyAwesomeFill, FallbackValue=Yellow}"> 
</Ellipse> 
+1

사실, 컨트롤을 개발할 때 심각한 후퇴이며 다른 컨트롤을 통해 모양을 확인해야합니다. 창 또는 폴백 값을 기본값과 동일하게 설정해야합니다. VS 2010에서 수정 될 예정입니다. –

+0

글쎄, 1 년이 지나고 2010 년에도 수정되지 않았습니다! 이것은 정말 끔찍한 일입니다 !! – Nils