Ich versuche eine benutzerdefinierte Klasse zu erstellen, die vom Image-Steuerelement geerbt wurde, und ich habe einige Probleme mit der Bindung.Verbinde eine DependancyProperty von einer Anwendungsressource mit einer Control DependancyProperty (die die Ressource verwendet)
ich DrawingImage in meinen Ressourcen verwende (das ist, was für das Vektor Bild geliefert wird)
so in meiner App.xaml Ressource Ich habe ein paar DrawingImages, Beispiel eins:
<DrawingImage x:Key="Shutdown">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="{x:Null}">
<GeometryDrawing.Pen>
Here--> <Pen Brush="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:IconImage}}, Path=Colour, UpdateSourceTrigger=PropertyChanged}" Thickness="2" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<PathGeometry FillRule="Nonzero" Figures="M8.332,4.941C5.759,6.271 4,8.956 4,12.052 4,16.47 7.582,20.052 12,20.052 16.418,20.052 20,16.47 20,12.052 20,8.911 18.19,6.193 15.555,4.884" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
Here--> <GeometryDrawing Brush="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:IconImage}}, Path=Colour, UpdateSourceTrigger=PropertyChanged}" Pen="{x:Null}">
<GeometryDrawing.Geometry>
<RectangleGeometry RadiusX="0" RadiusY="0" Rect="11,2,2,10" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup.Children>
<DrawingGroup.ClipGeometry>
<RectangleGeometry Rect="0,0,24,24" />
</DrawingGroup.ClipGeometry>
</DrawingGroup>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
und ich habe meine eigene Klasse wie folgt aufgebaut:
public class IconImage : Image
{
public enum Icons
{
None,
Shutdown,
Minimize
}
private Icons _icon;
public Icons Icon
{
get { return _icon; }
set
{
_icon = value;
if (value == Icons.None)
{
Visibility = Visibility.Hidden;
}
else
{
Visibility = Visibility.Visible;
this.SetResourceReference(Image.SourceProperty, value.ToString());
}
}
}
public static readonly DependencyProperty ColourProperty = DependencyProperty.Register("Colour", typeof(Brush), typeof(IconImage), new PropertyMetadata(Brushes.Black));
public Brush Colour
{
get { return (Brush)GetValue(ColourProperty); }
set { SetValue(ColourProperty, value); }
}
}
Usasge:
<local:IconImage Icon="Shutdown" Colour="CornflowerBlue" />
Problem ist, dass meine Pinselbindungen in den DrawingImages nicht an meine Color DependancyProperty in der benutzerdefinierten Klasse gebunden sind und ich keine Ahnung habe, wie dies zu erreichen ist, oder, wenn es überhaupt möglich ist. Wenn ich die Pinsel fest codiere, funktioniert es perfekt (natürlich). Ich muss nur in der Lage sein, die Farbe von der Steuerung zur Designzeit oder jederzeit im Code dahinter zu ändern.
Vielen Dank im Voraus!
-Sean-
Wo wurde 'DrawingImage' verwendet? Sicher, 'AncestorType' von' local: IconImage' für das 'DrawingImage'? – Iron
Sie wird verwendet, wenn die Icon-Eigenschaft festgelegt ist: this.SetResourceReference (Image.SourceProperty, value.ToString()); das setzt es in diesem Fall auf die DynamicReference von "Shutdown". –
Könnten Sie bitte den Code zeigen, der die Ressource 'x: Key =" Shutdown "' benutzt? – Iron