2016-09-20 108 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中的输出窗口是否有绑定错误。我认为你需要在该路径中添加RelativeSource与类型为'local:CalendarioPersonalizado'的祖先 – 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

您的DependencyProperty属于Brush类型。您不能将“绿色”隐式转换为画笔。

您可能需要使用转换器将颜色的字符串表示形式转换为笔刷,或者使属性类型为Color,然后将其绑定到相应的属性。

+0

我会尝试转换器。无论如何,当我在我的主窗口中设置属性时,intellisense会给我所有可用画笔的列表,所以我猜想我使用的类型不是字符串,而是画笔。 –

+0

我已经尝试使用一个转换器,但它没有提升,所以问题似乎主窗口无法通知值的更改。 –

相关问题