在我们的WPF应用程序中,我们有一堆按钮图标的矢量图形。我们在按钮样式上将ImageSource设置为StaticResource,如下所示。矢量本身是使用DrawingImage创建的。
一切正常,除非按钮位于DataTemplate中,用于绑定到列表的任何类型的ItemsControl。在这种情况下,按钮功能完美,但DrawingImage不可见。
<DrawingImage x:Key="MyIconVector}" x:Shared="False">
<DrawingImage.Drawing>
<GeometryDrawing>
<GeometryDrawing.Geometry>
<PathGeometry Figures="M 0,8 L 8,0 L 16,8" FillRule="EvenOdd"/>
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Thickness="1.5" Brush="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType=controls:ImageButton}, FallbackValue=Black}" LineJoin="Round" EndLineCap="Round" StartLineCap="Round"/>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingImage.Drawing>
</DrawingImage>
<Style x:Key="MyButton" TargetType="{x:Type controls:ImageButton}" BasedOn="{StaticResource ImageOnlyButton}">
<Setter Property="ImageMaxHeight" Value="20"/>
<Setter Property="ImageMaxWidth" Value="24"/>
<Setter Property="Width" Value="48"/>
<Setter Property="ImageSource" Value="{StaticResource MyIconVector}"/>
</Style>
然后一个简单的列表框控件如下,按钮将为空。
<ListBox ItemsSource="{Binding MyList}">
<ListBox.ItemTemplate>
<DataTemplate>
<controls:ImageButton Style="{StaticResource MyButton}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:0)
事实证明,上面的示例向量并不能真正反映我的情况。为了简洁起见,我试图抓住一个更简单的例子。想象一下,使用PriorityBindings看起来更像是这样。
事实证明我们遇到了这些PriorityBindings的问题。删除它们并使用标准的Pen装订(如我原来的帖子中所述),解决了这个问题。
<DrawingImage x:Key="ExpandIcon" x:Shared="False">
<DrawingImage.Drawing>
<GeometryDrawing>
<GeometryDrawing.Geometry>
<PathGeometry Figures="M 0,9.5 L 0,16 6.5,16 M 0,16 L 6.5,9.5 M 9.5,0 L 16,0 16,6.5 M 16,0 L 9.5,6.5" FillRule="EvenOdd"/>
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Thickness="1.5" LineJoin="Round" EndLineCap="Round" StartLineCap="Round">
<Pen.Brush>
<PriorityBinding>
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType=controls:ImageButton}" Path="Foreground"/>
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType=controls:ImageToggleButton}" Path="Foreground" FallbackValue="Black"/>
</PriorityBinding>
</Pen.Brush>
</Pen>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingImage.Drawing>
</DrawingImage>