2016-09-20 6 views
0
나는 사용자 정의 컨트롤이

이는 generic.axml 코드 :기본 창에서 사용자 정의 컨트롤의 속성을 설정하는 방법은 무엇입니까?

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:Calendario" 
    xmlns:MyNamespace="clr-namespace:Calendario;assembly=Calendario" 
    xmlns:Converters="clr-namespace:Calendario.Converters"> 

    <Converters:DateConverter x:Key="DateConverter"></Converters:DateConverter> 
    <Converters:DayBorderColorConverter x:Key="DayBorderColorConverter"></Converters:DayBorderColorConverter> 

    <Style TargetType="{x:Type local:CalendarioPersonalizado}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type local:CalendarioPersonalizado}"> 
        <Border Background="{TemplateBinding Background}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}"> 
         <DockPanel> 
          <TextBlock Text="{Binding Date}" /> 

          <Grid Height="30" DockPanel.Dock="Top"> 

          </Grid> 


          <ItemsControl ItemsSource="{Binding Days}"> 
           <ItemsControl.ItemTemplate> 
            <DataTemplate> 
             <Border BorderBrush="{Binding ColorRecuadroExterno, Mode=TwoWay}" BorderThickness="1" Padding="0">           
             </Border> 
            </DataTemplate> 
           </ItemsControl.ItemTemplate> 
          </ItemsControl> 
         </DockPanel> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

그리고 나는 dpendency 속성 내 Calendario.cs이 : 내가 사용하는 내 메인 창에서

public static readonly DependencyProperty ColorRecuadroExternoProperty = DependencyProperty.Register("ColorRecuadroExterno", typeof(Brush), typeof(CalendarioPersonalizado)); 
public Brush ColorRecuadroExterno 
{ 
    get { return (Brush)GetValue(ColorRecuadroExternoProperty); } 
    set { SetValue(ColorRecuadroExternoProperty, value); } 
} 

그리고 이상을 컨트롤 :

<local:CalendarioPersonalizado x:Name="cCalendario" ColorRecuadroExterno="Green"/> 

문제는 기본 창에서 설정하려고했던 것처럼 캘린더의 날짜 테두리가 초록색으로 설정되어 있지 않다는 것입니다.

또한 코드에서 나는 이것을 시도 behid :

cCalendario.ColorRecuadroExterno = System.Windows.Media.Brushes.Green; 

하지만 색상이 설정되어 있지 않습니다.

내가하고 싶은 것은 내 응용 프로그램에서 내 사용자 지정 cotrol의 테두리 색을 설정하는 것입니다.

감사합니다.

+1

'BorderBrush = "{Binding ColorRecuadroExterno, Mode = TwoWay}"'올바른 바인딩 경로가 있는지 의심 스럽습니다. 바인딩 오류에 대해 VS의 출력 창을 확인하십시오. 당신이 그 경로에'local : CalendarioPersonalizado' 타입의 조상을 가진 RelativeSource를 추가 할 필요가 있다고 생각합니다. – ASh

답변

1

로컬 : CalendarioPersonalizado 클래스에 콜백 메서드를 넣고이 콜백 메서드에서 배경을 설정하는 경우. 나는 그것이 효과가있을 것이라고 생각한다.

public static readonly DependencyProperty ColorRecuadroExternoProperty = DependencyProperty.Register("ColorRecuadroExterno", typeof(Brush), typeof(CalendarioPersonalizado), 
    new PropertyMetadata(Brushes.Brown, Callback)); 

private static void Callback(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    CalendarioPersonalizado obj = d as CalendarioPersonalizado; 
    obj.ColorRecuadroExterno.Background = (Brush)e.NewValue; 
} 
0

종속 속성은 브러시 유형입니다. 암시 적으로 "녹색"을 브러시로 변환 할 수 없습니다.

변환기를 사용하여 색상의 문자열 표현을 브러시로 변환하거나 속성 유형 Color를 만들어 적절한 속성에 바인딩해야합니다.

+0

나는 변환기를 시도 할 것입니다. 어쨌든, 메인 윈도우에 속성을 설정하면 intellisense는 사용 가능한 모든 브러쉬 목록을 제공하므로 사용중인 유형은 문자열이 아니지만 브러시입니다. –

+0

나는 변환기를 시도했지만 상승하지 않았으므로 주 윈도우가 값 변경을 알릴 수없는 것으로 보인다. –

관련 문제