2014-07-10 2 views
0

사용자 속성 중 하나의 속성에 대해 기본값을 사용하여 컨트롤을 만들고 있습니다. 내가 현재 어떻게하고 있는지 알려드립니다. WPF에서 기본값으로 노출 된 속성을 만드는 올바른 방법은 무엇입니까?

using System.Windows; 
using System.Windows.Controls; 

namespace Example 
{ 
    /// <summary> 
    /// Interaction logic for HelloWorld.xaml 
    /// </summary> 
    public partial class HelloWorld : UserControl 
    { 


     public HelloWorld() 
     { 
      InitializeComponent(); 
     } 

     public static readonly DependencyProperty TextToDisplayProperty = DependencyProperty.Register("TextToDisplay", typeof(string), 
      typeof(HelloWorld), new PropertyMetadata("Hello World!")); 

     public string TextToDisplay 
     { 
      get { return (string)GetValue(TextToDisplayProperty); } 
      set { SetValue(TextToDisplayProperty, value); } 
     } 
    } 
} 

문제

<UserControl x:Class="Example.HelloWorld" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300" 
      x:Name="This"> 
    <Grid> 
      <TextBlock Text="{Binding ElementName=This, Path=TextToDisplay}"/> 
    </Grid> 
</UserControl> 

는 내 기본 값을 표시하지 않습니다 미리보기 창에서 찾고 때.

enter image description here

하지만 다른 뭔가에 내 컨트롤을 넣을 경우 기본 텍스트는 나타나지 않습니다.

enter image description here

나는 UserControl 오전 때 디자이너에 표시되지 않는다는 사실은 내가 그것을 올바른 방법을 수행하지 오전 나를 걱정한다. 사용자에게 속성을 올바르게 표시하고 있습니까? 그렇지 않은 경우 컨트롤의 사용자가 재정의 할 수있는 속성을 표시하는 올바른 방법은 무엇입니까?

+1

디자이너를 사용하지 않는 것이 좋습니다. 또한 사용자 컨트롤의 속성을 표시하는 올바른 방법입니다. –

+0

@ H.B. 문제는 내가 만들고있는 실제 컨트롤이 매우 복잡하고 설정하려는 속성 중 많은 부분이 브러시 색상입니다. 그러나 모든 브러쉬 색상이 흰색으로 끝나고 모든 문자열이 비어 있으므로 레이아웃을 올바르게 가져올 수 없습니다. 난 하드 코딩 된 값을 사용하여 돌아가서 모든 것을 대체해야합니다. –

답변

2

DependencyProperty.Register Method (String, Type, Type, PropertyMetadata)PropertyMetadata Constructor (Object에서 볼 수있는 것처럼, 당신의 DependencyProperty 올바르게 기본 값으로 선언 한) MSDN의 페이지 :

public static DependencyProperty Register(
    string name, 
    Type propertyType, 
    Type ownerType, 
    PropertyMetadata typeMetadata 
) 

...

public PropertyMetadata(
    Object defaultValue 
) 

문제를 무시하십시오 Visual Studio WPF 디자이너와 함께 사용하면 항상 문제가 발생했기 때문입니다. @ScottChamberlain, 대부분의 WPF 개발자는이 정확한 이유로 손으로 XAML을 작성합니다 ... WPF 디자이너는 도움이되지 않습니다. 응용 프로그램을 실행할 때마다 스크린 샷을 찍거나 Snipping Tool을 사용하여 UI를 캡처하십시오. 이렇게하면 다음 변경 사항을 적용 할 때이를 참조 할 수 있습니다. 이 프로세스를 반복하면 작업이 완료됩니다.

관련 문제