WPF样式表现异常

3

我在我的 App.xaml 文件中有以下 Style

<Style x:Key="BrowseBtn" TargetType="Button">
    <Setter Property="Content">
         <Setter.Value>
              <Image Source="pack://application:,,,/Resources/BrowseIcon.png" />
         </Setter.Value>
    </Setter>
</Style>

我在 Window 中使用这种样式:

<Button x:Name="btnBrowseCampaigns" Grid.Row="0" Style="{StaticResource BrowseBtn}" />
<Button x:Name="btnBrowseDatabase" Grid.Row="1" Style="{StaticResource BrowseBtn}" />

正如您所看到的,这两个按钮之间没有明显的区别,但在设计者(和运行时),只有一个按钮显示图标。这是一个错误还是什么?

1个回答

1

尝试像这样设置 x:Shared="False" 的样式:

<Window.Resources>
    <Style x:Key="BrowseBtn"
           x:Shared="True" 
           TargetType="{x:Type Button}">

        <Setter Property="Content">
            <Setter.Value>
                <Image Source="pack://application:,,,/BrowseIcon.jpg" />
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

x:Shared="True"时,默认情况下,一个样式适用于所有元素 - 在这种情况下,系统会在重复的Content上出现问题。当x:Shared="False"时,每次请求时都会为每个元素创建样式。引用自MSDN

当设置为false时,修改WPF资源检索行为,使得对于被标记资源的请求会为每个请求创建一个新实例,而不是为所有请求共享同一个实例。

更多信息,请参见:

MSDN:x:Shared属性


我的VS无法识别x:Shared - dotNET
此外,为什么有人希望这种类型的样式不被共享? - dotNET
@dotNET:奇怪的是,出了什么错误?使用的是哪个版本的VS?在我的Intelesense中它没有出现,必须手动输入“Style”。 - Anatoliy Nikolaev
我正在使用VS2013 Express。这是WPF与.NET 4.0,如果有关系的话,这是一个应用程序级资源。 - dotNET
哇,这真的可以工作,尽管VS没有智能感知。 - dotNET

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接