これはできないようです。私はDrawingBrushをResourceDictionaryに移動させて実験しましたが、これが終了するとデータバインディングによってエラーがスローされます。次のXAMLを取得する場合
<Rectangle x:Name="IconBrush" local:Helper.Colour="Black">
<Rectangle.Fill>
<DrawingBrush Stretch="Uniform">
<DrawingBrush.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Geometry="M1,1 L9.5,1 L9.5,13 L1,13 z M10.5,10.4 L13.15,13 M11.6,7.675 C11.6,9.5113467 10.066575,11 8.175,11 C6.2834248,11 4.75,9.5113467 4.75,7.675 C4.75,5.8386532 6.2834248,4.35 8.175,4.35 C10.066575,4.35 11.6,5.8386532 11.6,7.675 z">
<GeometryDrawing.Pen>
<Pen Thickness="1"
Brush="{Binding Path=(local:Helper.Colour), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Rectangle}}}" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</Rectangle.Fill>
</Rectangle>
次に、これを代わりに変更して、動作を停止します。なぜ再利用可能なリソースを利用するためにこれを行うことができないのか分かりません。
<Rectangle x:Name="IconBrush" pm4uc:Helper.Colour="Black"
Fill="{DynamicResource NewIconBrush}" />
WPFは、リソース辞書内の祖先またはデータバインディングを見つけることができないと思います。