使用windows.resource中的下一个代码块。
<Style TargetType="Button" x:Key="l1" >
<Setter Property="Button.Effect" >
<!--<Setter Property="BitmapEffect">-->
<Setter.Value>
<DropShadowEffect />
</Setter.Value>
</Setter>
<Setter Property="Content" >
<Setter.Value >
<StackPanel Orientation="Horizontal">
<Image Source="Resources\find.bmp" Stretch="Uniform" ></Image>
<TextBlock>Find</TextBlock>
</StackPanel>
</Setter.Value>
</Setter>
</Style>
它仅适用于一个按钮,但只要我在运行时生成第二个按钮错误。
<Button Height="23" HorizontalAlignment="Left" Margin="322,25,0,0" Name="Button18" VerticalAlignment="Top" Width="75" Style="{StaticResource l1}" />
<Button Height="23" HorizontalAlignment="Left" Margin="586,37,0,0" Name="Button19" VerticalAlignment="Top" Width="75" Style="{StaticResource l1}" />
解决此问题的任何解决方案?
答案 0 :(得分:0)
您不能直接以这种方式设置Content
的{{1}}。这样做的原因是ContentControl
setter中的StackPanel
(仅命名一个)与样式适用的所有按钮的实例相同;但是,这是不允许的(并且可能导致您获得元素已经是另一个元素的子元素异常)。
相反,您应该设置Content
属性:
ContentTemplate
这将有效,因为现在将为模板的每个实例化创建一个新的可视化树分支(即,您将拥有与按钮一样多的<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="Resources\find.bmp" Stretch="Uniform" ></Image>
<TextBlock>Find</TextBlock>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
等。)
答案 1 :(得分:0)
您无法通过类似的样式设置控件的内容(至少不会两次)。
您应该使用模板发送内容,如下所示:
<DataTemplate x:Key="buttonTemplate">
<StackPanel Orientation="Horizontal">
<Image Source="Resources\find.bmp" Stretch="Uniform" ></Image>
<TextBlock>Find</TextBlock>
</StackPanel>
</DataTemplate>
<Style TargetType="Button" x:Key="l1" >
<Setter Property="Button.Effect" >
<Setter.Value>
<DropShadowEffect />
</Setter.Value>
</Setter>
<Setter Property="ContentTemplate" Value="{StaticResource buttonTemplate}" />
</Style>