在 WPF 应用程序中加载具有相同样式的另一个控件时样式丢失
Style lost when another control with the same style loaded in WPF Application
在我的 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 样式按钮的 window 已正确加载。但是从这个 window 当加载另一个用户控件携带一个具有相同样式的 SaveButton 的按钮时,用户控件按钮显示正确但 window 上的按钮变成完全空白(没有边距,没有图像,无文字)。
感谢您在这方面的任何帮助。
当您明确设置 Button
的 Content
属性 时,其值只能应用一次。默认情况下,XAML 属性 x:Shared
设置为 true。这意味着任何给定的资源请求总是 returns 同一个实例。在您的情况下,这意味着每次应用 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>
在我的 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 样式按钮的 window 已正确加载。但是从这个 window 当加载另一个用户控件携带一个具有相同样式的 SaveButton 的按钮时,用户控件按钮显示正确但 window 上的按钮变成完全空白(没有边距,没有图像,无文字)。
感谢您在这方面的任何帮助。
当您明确设置 Button
的 Content
属性 时,其值只能应用一次。默认情况下,XAML 属性 x:Shared
设置为 true。这意味着任何给定的资源请求总是 returns 同一个实例。在您的情况下,这意味着每次应用 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>