首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在WPF应用程序中加载另一个具有相同样式的控件时样式丢失

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

Stack Overflow用户
提问于 2019-06-09 16:54:34
回答 1查看 243关注 0票数 1

在我的WPF应用程序中,我得到了一个奇怪的行为,按钮在运行时丢失了样式。

当加载包含具有相同样式的按钮的另一个用户控件时,这些按钮将放弃该样式。

以下是App.xaml中的样式定义:

代码语言:javascript
复制
   <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的按钮,用户控件按钮可以正常显示,但是窗口上的按钮完全变成空白(没有边距,没有图像,没有文本)。

在这方面的任何帮助都是值得感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-11 03:28:20

在显式设置ButtonContent属性时,它的值只能应用一次。默认情况下,XAML属性x:Shared设置为true。这意味着任何给定的资源请求总是返回相同的实例。在您的示例中,这意味着每次应用Style时,都会应用相同的ContentControl.Content值。要省略这一点,您有三种选择。

第一个选项是将Style标记的XAML属性设置为False

<Style x:Shared=False ...></Style>

第二个选项是覆盖ControlControlTemplate

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56513252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档