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> 

И у меня Calendario.cs со свойством dpendency:

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 для привязки erros. Я думаю, вам нужно добавить 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. Вы не можете неявно преобразовать «зеленый» в кисть.

Вам необходимо либо использовать конвертер для преобразования строкового представления цвета в кисть, либо сделать свой тип свойства «Цвет», и привязать его к соответствующему свойству.

+0

Я попробую конвертер. Во всяком случае, когда я установил в своем главном окне свойство intellisense, дайте мне список всех доступных кистей, поэтому я предполагаю, что тип, который я использую, не является строкой, а является кистью. –

+0

Я пробовал с конвертером, но он не повышался, поэтому проблема кажется, что главное окно не может уведомить об изменении значения. –

 Смежные вопросы

  • Нет связанных вопросов^_^