在我的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的按钮,用户控件按钮可以正常显示,但是窗口上的按钮完全变成空白(没有边距,没有图像,没有文本)。
在这方面的任何帮助都是值得感谢的。
发布于 2019-06-11 03:28:20
在显式设置Button
的Content
属性时,它的值只能应用一次。默认情况下,XAML属性x:Shared
设置为true。这意味着任何给定的资源请求总是返回相同的实例。在您的示例中,这意味着每次应用Style
时,都会应用相同的ContentControl.Content
值。要省略这一点,您有三种选择。
第一个选项是将Style
标记的XAML属性设置为False
<Style x:Shared=False ...></Style>
第二个选项是覆盖Control
的ControlTemplate
<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
:
<Style ...">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<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>
https://stackoverflow.com/questions/56513252
复制相似问题