2011-07-13 18 views
1

私はカスタムコントロールを持っています。カスタムコントロールには、いくつかの要素があります。これらの要素の1つに特殊な高さ値を設定する必要があります。generic.xamlのTemplateBindingとプロパティの再描画が変更されました

私は話している。この高さは、次のコードでCanvasThicknessです:今

<ControlTemplate x:Key="SliderTemplate" TargetType="{x:Type Slider}"> 
    <Canvas Width="25" Height="{TemplateBinding local:CustomControl1.CanvasThickness}" Background="Green"> 
    // Templating Slider 
    </Canvas> 
</ControlTemplate> 

<Style TargetType="{x:Type local:CustomControl1}"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type local:CustomControl1}"> 
     <Canvas Width="50" Height="20" Background="GreenYellow"> 
      <Slider Template="{StaticResource SliderTemplate}" /> 
     </Canvas> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

generic.xamlで
private double canvasThickness; 

public static readonly DependencyProperty CanvasThicknessProperty = 
    DependencyProperty.Register("CanvasThickness", 
    typeof(double), 
    typeof(CustomControl1), 
    new FrameworkPropertyMetadata(3d)); 

public double CanvasThickness 
{ 
    get { return canvasThickness; } 
    set { canvasThickness = value; } 
} 

は、キャンバスの高さ - プロパティのために使用されるこのCanvasThicknessですこのスライダの高さは3です。このようにCustomControlを使用したとしましょう:

<ctrl:CustomControl1 CanvasThickness="12"/> 

Sliderの高さは12であると仮定しますが、それでも3です.CanvasThicknessの値は12です。

PropertyChangedでCustomControlを再描画するにはどうすればよいですか?私はFrameworkPropertyMetadataOptionsを試しましたが、CustomControlには影響しません。

ありがとうございます。

編集:可能であれば、ソリューションはSilverlightでも実行する必要があります。

答えて

0

あなたのスライダーテンプレート内TemplateBindingSliderではなく、カスタムコントロールでテンプレートコントロール、上CanvasThicknessと呼ばれるプロパティを解決しようとしています。

最初はCanvasの点が分かりません。 Borderは一般的に悪い考えであるハードコードされた幅と高さを持っている、

<Style TargetType="{x:Type local:CustomControl1}"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type local:CustomControl1}"> 
     <Border Width="50" Height="20" Background="GreenYellow"> 
      <Slider Template="{StaticResource SliderTemplate}" Height="{TemplateBinding CanvasThickness}" /> 
     </Border> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

その後も:それはあなたが達成しようとしているかを正確に知らなくても言うことは不可能ですが、私はあなたがこれに近い何かをしたい疑います。

1

それは簡単です:)

<Style x:Key="CanvasStyle" TargetType="{x:Type local:CustomCanvas}"> 
    <Setter Property="Height" Value="{Binding Path=CanvasThickness, RelativeSource={RelativeSource AncestorType={x:Type local:CustomControl1}}}" /> 
</Style> 

<ControlTemplate x:Key="SliderTemplate" TargetType="{x:Type Slider}"> 
    <local:CustomCanvas Style="{StaticResource CanvasStyle}" Background="Green" /> 
</ControlTemplate> 

<Style TargetType="{x:Type local:CustomControl1}"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type local:CustomControl1}"> 
     <Canvas Width="50" Height="20" Background="GreenYellow"> 
      <Slider Template="{StaticResource SliderTemplate}" /> 
     </Canvas> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 
関連する問題