我想将Button
的{{1}}设置为Content
中定义的Path
。所以我在资源中创建了Resources
,定义了UserControl
,两个Path
和按钮Brushes
......一切都很好。
Style
我决定将这些资源放在单独的<UserControl ...>
<UserControl.Resources>
<Path x:Key="PageSmallIcon2" Stretch="Fill" Fill="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}, Path=Foreground}" Stroke="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}, Path=Foreground}" SnapsToDevicePixels="True" Data="F1 M 19,25L 27,25L 27,33L 19,33L 19,25 Z M 19,36L 27,36L 27,44L 19,44L 19,36 Z M 31,25L 57,25L 57,33L 31,33L 31,25 Z M 19,47L 27,47L 27,55L 19,55L 19,47 Z "/>
<SolidColorBrush x:Key="MainColorBrush2" Color="Orange"/>
<SolidColorBrush x:Key="WhiteColorBrush2" Color="WhiteSmoke"/>
<Style x:Key="TransparentButtonStyle2" TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="{StaticResource WhiteColorBrush2}"/>
<Setter Property="Height" Value="25"/>
<Setter Property="Width" Value="25"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Rectangle Fill="Transparent"/>
<ContentPresenter x:Name="contentPresenter" Content="{TemplateBinding Content}" Margin="2" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Foreground" Value="{StaticResource MainColorBrush2}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
<Button Command="{Binding Path=SmallPageSizeCommand}" Style="{StaticResource TransparentButtonStyle2}" Content="{StaticResource PageSmallIcon2}"/>
...
</Grid>
</UserControl>
中。我打算有更多的ResourceDictionaries
和Paths
...我还希望只有一种按钮样式。基本上我是这样做的,因为我的每个按钮都有样式,Brushes
每个特定的Path
都是Button
的{{1}}的一部分。
所以我创建了三个Button
ControlTemplate
,ResourceDictionaries
和Colors.xaml
,然后我更新了Icons.xaml
Controls.xaml
当我按App.xaml
时,<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Theme/Colors.xaml"/>
<ResourceDictionary Source="Theme/Icons.xaml"/>
<ResourceDictionary Source="Theme/Controls.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
的{{1}}属性未更新。有人可以解释为什么它不能在单独的Path
中工作并为我提供这个问题的解决方案吗?
更新
所以我发现问题出在Fill
。如果Button
中有ResourceDictionaries
Path
,Path
中的颜色和<UserControl.Resources>
中的按钮样式,一切都会有效。
我还发现当我在Colors.xaml
中使用Controls.xaml
时,我在Path
中使用它作为按钮的内容
Icons.xaml
我有UserControl
的多个实例...然后<Button Command="{Binding Path=SmallPageSizeCommand}" Style="{StaticResource TransparentButtonStyle2}" Content="{StaticResource PageSmallIcon2}"/>
一次只出现在UserControl
的一个实例中。
答案 0 :(得分:14)
原因:
我有多个UserControl实例...然后Path一次只出现在一个UserControl实例中
是因为你在XAML中给予不同的父元素。您要将多个Button
控件的内容设置为资源中定义的Path
Shape
。出于优化目的,对资源的每个引用都将默认返回对象的相同实例,并且因为在WPF中每个元素一次只能有一个父元素,所以只有XAML声明中的最后一个Button
才能拥有它的内容集到期望的Path
。
要解决此问题,您可以使用x:Shared =“False”属性标记资源。在这种情况下,XAML Parser将为每个Reference生成Path元素的新实例。