在我的WPF应用程序中,我遇到一种奇怪的行为,即按钮在运行时失去样式。
当另一个包含相同样式的按钮的用户控件被加载时,按钮将放弃样式。
这是App.xaml中的样式定义:
<Style x:Key="SaveButton" TargetType="telerik:RadButton">
<Setter Property="Margin" Value="5"/>
<Setter Property="Content">
<Setter.Value>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="5" Text="Save"/>
<Image Source="Resources\icons\save.png" Margin="5"
Height="16" Width="16"></Image>
</StackPanel>
</Setter.Value>
</Setter>
</Style>
带有带有SaveButton样式的按钮的窗口已正确加载。但是,从该窗口加载另一个带有相同样式的SaveButton的用户控件时,用户控件按钮会正确显示,但窗口上的按钮完全变为空白(无边距,无图像,无文本)。
在这方面的任何帮助都将受到赞赏。
答案 0 :(得分:1)
在显式设置Content
的{{1}}属性时,其值只能应用一次。默认情况下,XAML属性Button
设置为true。这意味着任何给定的资源请求始终返回相同的实例。在您的情况下,这意味着每次应用x:Shared
时,都会应用相同的Style
值。要忽略这一点,您有三个选择。
第一个选项是将ContentControl.Content
标记上的XAML属性设置为true:
Style
第二个选项是覆盖<Style x:Shared=False ...></Style>
中的ControlTemplate
:
Control
第三个选项是直接覆盖<Style ...>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="5" Text="Save"/>
<Image Source="Resources\icons\save.png" Margin="5"
Height="16" Width="16"></Image>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
:
ContentControl.ContentTemplate