2010-11-18 69 views
0

我需要將自定義依賴項屬性綁定到控件中的圖像元素。WPF綁定幫助

現在LabelForeground結合得非常好TextForeground,但不是ImageGeometryDrawing(圖像保持透明)。

出了什麼問題?

<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財產。你正在引用自我,這將是GeometryDrawing。如果您試圖從其他控件中獲取TextForeground,請更改您的RelativeSource

<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 2010-11-18 16:46:28

+0

@serhio你在GeometryDrawing上引用RelativeSource = {x:Static RelativeSource.Self}雖然...在標籤中你不是 – 2010-11-18 16:50:02

+0

所以我該如何改變Source來指向usercontrol本身? – serhio 2010-11-18 16:50:55

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