2016-04-06 8 views
0

ich eine GeometryDrawing als Button-Symbol verwenden möchten, in einem Control, und ich will seine Brush Eigenschaft auf die Foreground Eigenschaft der Schaltfläche gebunden sein, aber es funktioniert nicht. Auf der anderen Seite, wenn ich den Pinsel explizit setze, funktioniert es.Template arbeiten nicht in einem DrawingImage in einem Button Style

Hier ist meine (ohne Funktion) Code:

<Style x:Key="SimpleButtonStyle" TargetType="{x:Type Button}"> 
     <Setter Property="Background" Value="LightGray"/> 
     <Setter Property="Foreground" Value="Black"/> 
     <Setter Property="BorderThickness" Value="2"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}"> 
        <Border x:Name="border" 
          BorderBrush="{TemplateBinding Foreground}" 
          BorderThickness="{TemplateBinding BorderThickness}" 
          Background="{TemplateBinding Background}" 
          SnapsToDevicePixels="true"> 
         <StackPanel Orientation="Vertical"> 
          <Image x:Name="buttonImage" Height="20" Width="20"> 
           <Image.Source> 
            <DrawingImage> 
             <DrawingImage.Drawing> 


              <!-- line below does not work --> 
              <GeometryDrawing Brush="{TemplateBinding Foreground}"> 


               <GeometryDrawing.Geometry> 
                <EllipseGeometry RadiusX="15" RadiusY="15"/> 
               </GeometryDrawing.Geometry> 
              </GeometryDrawing> 
             </DrawingImage.Drawing> 
            </DrawingImage> 
           </Image.Source> 
          </Image> 
          <ContentPresenter x:Name="contentPresenter"/> 
         </StackPanel> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
+0

Nun, aus irgendeinem seltsamen Grund, 'Pinsel = "{Binding Foreground, RelativeSource = {RelativeSource TemplatedParent}}" funktioniert. Dies ist in anderen Antworten relativ gut dokumentiert. Könnte das zumindest jemand näher ausführen? Ich würde gerne eine Antwort mit ein paar nützlichen Informationen akzeptieren ... – heltonbiker

Antwort

1

Sehen Sie diese WPF TemplateBinding vs RelativeSource TemplatedParent - Paul Fischers Antwort. Insbesondere dieser Teil in Bezug auf Template:

• Funktioniert nicht mit Eigenschaften auf Freezables

Wenn Sie GeometryDrawing sehen Sie seine Vererbungshierarchie Freezable sehen kann, umfasst: GeometryDrawing: Zeichnung: Anima: Freezable: DependencyObject: DispatcherObject : Objekt

So können Sie eine TemplateBinding für die Brush-Eigenschaft von Freezable GeometryDrawing nicht verwenden.

Sie können die Template auf der BorderBrush Eigenschaft Border verwenden, da Border erbt nicht von Freezable: Border: Ausstatter: Framework: UIElement: Visuell: DependencyObject: DispatcherObject: Object

Verwandte Themen