在WPF应用程序中加载另一个具有相同样式的控件时,样式丢失

时间:2019-06-09 08:54:34

标签: c# wpf telerik

在我的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的用户控件时,用户控件按钮会正确显示,但窗口上的按钮完全变为空白(无边距,无图像,无文本)。

在这方面的任何帮助都将受到赞赏。

1 个答案:

答案 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