2010-11-18 8 views
0

Мне нужно связать свойство пользовательской зависимости с элементами изображения внутри элемента управления.Помощь с привязкой WPF

Теперь Label «s Foreground связывает очень хорошо TextForeground, но не GeometryDrawing внутри Image (изображение остается прозрачным).

Что не так?

<UserControl x:Class="MyStopControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" Height="12" Width="24"> 
    <Canvas > 
     <Image x:Name="Dot" Canvas.Left="0" Canvas.Top="0"> 
      <Image.Source> 
       <DrawingImage> 
        <DrawingImage.Drawing> 
         <DrawingGroup> 
          <GeometryDrawing> 
           <GeometryDrawing.Pen> 
            <Pen Brush="{Binding RelativeSource={x:Static RelativeSource.Self},Path=TextForeground}" Thickness="2" x:Name="BigCircleThickness"/> 
           </GeometryDrawing.Pen> 
           <GeometryDrawing.Geometry> 
            <GeometryGroup> 
             <EllipseGeometry x:Name="BigCircle" Center="0,0" RadiusX="7" RadiusY="7"/> 
            </GeometryGroup> 
           </GeometryDrawing.Geometry> 
          </GeometryDrawing> 
          <GeometryDrawing> 
           <GeometryDrawing.Pen> 
            <Pen Brush="{Binding RelativeSource={x:Static RelativeSource.Self},Path=TextForeground}" Thickness="1"/> 
           </GeometryDrawing.Pen> 
           <GeometryDrawing.Geometry> 
            <GeometryGroup> 
             <EllipseGeometry x:Name="MediumCircle" Center="0,0" RadiusX="4" RadiusY="4"/> 
            </GeometryGroup> 
           </GeometryDrawing.Geometry> 
          </GeometryDrawing> 
          <GeometryDrawing Brush="{Binding RelativeSource={x:Static RelativeSource.Self},Path=TextForeground}"> 
           <GeometryDrawing.Geometry> 
            <GeometryGroup> 
             <EllipseGeometry x:Name="SmallCircle" Center="0,0" RadiusX="2" RadiusY="2"/> 
            </GeometryGroup> 
           </GeometryDrawing.Geometry> 
          </GeometryDrawing> 
         </DrawingGroup> 
        </DrawingImage.Drawing> 
       </DrawingImage> 
      </Image.Source> 
     </Image> 

     <Border x:Name="StopShadow" 
       Background="{Binding ElementName=TextBackground}" 
       LayoutTransform="{Binding ElementName=StopText, Path=LayoutTransform}"> 
      <Label x:Name="StopLabel" 
        Content="Bla bla some text" 
        Foreground="{Binding ElementName=TextForeground}" /> 
     </Border> 

    </Canvas> 
</UserControl> 

ответ

3

GeometryDrawing не имеет TextForeground свойство. Вы ссылаетесь на Self, который будет GeometryDrawing. Измените свой RelativeSource, если вы пытаетесь захватить TextForeground с помощью другого элемента управления.

<GeometryDrawing.Pen> 
    <Pen Brush="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=TextForeground}" Thickness="1"/> 
</GeometryDrawing.Pen> 
+0

** MyStopControl имеет ** в 'свойство TextForeground'. Так, например, для метки> «Foreground =» {Binding ElementName = TextForeground} «работает очень хорошо. – serhio

+0

@serhio Вы ссылаетесь на RelativeSource = {x: Static RelativeSource.Self} на GeometryDrawing, хотя ... в Label вы не –

+0

, так как мне изменить источник, чтобы указать на сам пользовательский контроль? – serhio

3
<UserControl x:Name="MyStopControl" > 
    ... 
    <Pen Brush="{Binding ElementName=MyStopControl, Path=TextForeground}"/> 
    ... 
</UserControl>