所以我不明白这是怎么发生的,但是我在资源字典中定义了一个按钮样式,并在currentSlide
中加载了该字典。
但它并没有应用于我想要的所有按钮,只适用于最后一个元素。
风格:
Windows.Resources
加载词典:
<Style TargetType="{x:Type Button}" x:Key="FolderOpenBtn">
<Setter Property="Content">
<Setter.Value>
<StackPanel Orientation="Horizontal">
<Viewbox Width="16" Height="16" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Margin="0,0,2,0">
<Rectangle Width="16" Height="16">
<Rectangle.Fill>
<DrawingBrush>
<DrawingBrush.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="#00FFFFFF" Geometry="F1M0,0L16,0 16,16 0,16z" />
<GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M0,2.9688L0,11.9688C0,12.5858 0.227,13.0718 0.57,13.4038 1.14,13.9478 2,13.9688 2,13.9688L13.677,13.9688 16,8.1648 16,6.9688 15,6.9688 15,4.9688C15,3.6698,13.97,2.9688,13,2.9688L10.116,2.9688 9.116,0.9688 2,0.9688C1.005,0.9688,0,1.6658,0,2.9688" />
<GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M2,3L8,3 9,5 13,5 13,8 4,8 2,13z" />
<GeometryDrawing Brush="#FF424242" Geometry="F1M1,3L1,12C1,12.97,1.94,12.984,1.997,12.984L2,12.984 2,3 8,3 9,5 13,5 13,8 4,8 2,13 13,13 15,8 14,8 14,5C14,4,12.764,4,13,4L9.5,4 8.5,2 2,2C2,2,1,2,1,3" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</Rectangle.Fill>
</Rectangle>
</Viewbox>
<TextBlock Text="Select..." />
</StackPanel>
</Setter.Value>
</Setter>
</Style>
将样式应用于两个按钮:
按钮1 :
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/templates/Styles.xaml" />
<ResourceDictionary Source="/templates/DatabaseTabItem.xaml" />
<ResourceDictionary Source="/templates/SatzartTabItem.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
按钮2 :
<Button x:Name="ClassPathSelectBtn" Grid.Column="1" Grid.Row="0" MinWidth="70" Width="Auto" Margin="10,0,0,0" Height="23" VerticalAlignment="Bottom"
Click="BtnSelectPath_Click" Background="#e3e3e3" Style="{StaticResource FolderOpenBtn}" />
请忽略蓝色悬停效果。
你能帮我解决我做错的事吗?
答案 0 :(得分:5)
您在Style中有一个UI元素,应用于Button的内容。
由于Style和UI元素是共享的,因此只有一次它的实例。但是,单个UI元素只能显示一次,即只能有一个父元素。您可以通过将Style的x:Shared
属性设置为false来解决此问题:
<Style TargetType="Button" x:Key="FolderOpenBtn" x:Shared="False">
...
<Style>
不是通过分配Button的内容直接创建UI元素,而是可以更好地设置ContentTemplate属性:
<Style TargetType="Button" x:Key="FolderOpenBtn">
<Setter Property="Content" Value="Select..."/>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Viewbox Width="16" Height="16" Margin="0,0,2,0">
...
</Viewbox>
<TextBlock Text="{Binding Content,
RelativeSource={RelativeSource TemplatedParent}}"/>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
这样也可以轻松替换文本,只需将Button的内容设置为默认"Select..."
以外的其他值。