2016-09-20 7 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); } 
} 

以降コントロール:

問題は、私がメインウィンドウで設定しようとしたように、カレンダーの1日のボーダーが緑色に設定されていないことです。

はまた、コードで私はこれを試してみましたbehid:

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

しかし、色が設定されていません。

私がしたいのは、私のメインアプリケーションのカスタムコトロールの境界線の色を設定することです。

ありがとうございました。

+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

DependencyPropertyはBrushタイプです。暗黙的に "緑色"をブラシに変換することはできません。

コンバーターを使用して、色の文字列表現をブラシに変換するか、またはプロパティタイプColorを作成して適切なプロパティにバインドする必要があります。

+0

私はコンバータを試します。とにかく、メインウィンドウにプロパティを設定すると、Intellisenseは使用可能なすべてのブラシのリストを取得します。したがって、使用しているタイプは文字列ではなく、ブラシです。 –

+0

私はコンバータを試しましたが、それは上昇していないので、メインウィンドウが値の変更を通知することができないようです。 –

関連する問題