微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过样式将按钮的内容设置为<Image>

如何解决通过样式将按钮的内容设置为<Image>

| 无法使它正常工作:
<UserControl>
    <UserControl.Resources>
        <ResourceDictionary>
            <Style x:Key=\"TestStyle\" targettype=\"{x:Type Button}\">
                <Setter Property=\"Button.Content\">
                    <Setter.Value>
                        <Image Source=\"D:\\Temp\\dictionary16.png\"/>
                    </Setter.Value>
                </Setter>
            </Style>
        </ResourceDictionary>
    </UserControl.Resources>
    <StackPanel VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\">
        <Button Style=\"{StaticResource TestStyle}\"/>
        <Button Style=\"{StaticResource TestStyle}\"/>
    </StackPanel>
</UserControl>
代码引发以下异常(指向第二个按钮):   指定的元素已经是另一个元素的逻辑子级。首先断开连接。     

解决方法

        该样式创建了ѭ1的一个实例,您不能在这样的两个地方使用它。您可以使用
x:Shared
= false
将图像创建为单独的资源,并以样式引用它,然后在使用该样式的每个位置都会创建一个新图像。 例如
<UserControl>
    <UserControl.Resources>
        <Image x:Key=\"img\" x:Shared=\"false\" Source=\"D:\\Temp\\dictionary16.png\" />
        <Style x:Key=\"TestStyle\" TargetType=\"{x:Type Button}\">
            <Setter Property=\"Content\" Value=\"{StaticResource img}\" />
        </Style>
    </UserControl.Resources>
    <StackPanel VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\">
        <Button Style=\"{StaticResource TestStyle}\" />
        <Button Style=\"{StaticResource TestStyle}\" />
    </StackPanel>
</UserControl>
    ,        昨天我已经找到一个存在类似问题的用户:WPF-以一种样式更改按钮的内容吗? 这篇文章将我带到了这个问题(由于stackoverflow -.-的8小时限制而无法发布)
<Setter Property=\"ContentTemplate\">
    <Setter.Value>
        <DataTemplate>
            <Image Source=\"{mcWPF:LangRes imgSettings16,Bitmap}\" Height=\"14\"/>
        </DataTemplate>
    </Setter.Value>
</Setter>
不知道天气比H.B.的解决方案更干净/更脏/更好     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。