2016-09-20 154 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

我已經嘗試使用一個轉換器,但它沒有提升,所以問題似乎主窗口無法通知值的更改。 –

相關問題