C#/ WPF:以编程方式分配样式

时间:2013-11-15 08:08:43

标签: c# wpf

我是一个使用C#/ WPF / Telerik-Controls的项目的新手。

有这种风格:

<Style x:Key="MyButtonStyle" Target="{x:Type Button">
    <Setter Property="Width" Value="28"/>
    <Setter Property="Height" Value="28"/>
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <Image Source="/MyPrj;component/Images/mybutton.png"
                    x:Name="image"
                    Width="24"
                    Height="24"
                    Margin="-2,-2-2,-1"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

在XAML中我可以使用这样的风格:

<RadButton Style="{StaticResource MyButtonStyle}"/>

这很好用。按钮的大小为28x28像素,显示已定义的图像

现在我想以编程方式分配样式:

RadButton button = new RadButton();
button.Style = FindResource("MyButtonStyle") as Style;

程序似乎找到了样式,因为按钮的大小是28x28像素。

但它没有显示图像! 按钮显示文字“图片”

我做错了什么?

TIA!

编辑:

  • 添加了项目正在使用Telerik-Controls的事实。

  • 更正了样式

1 个答案:

答案 0 :(得分:2)

ImagesStyles有一个不为人知的怪癖。通过像这样定义图像,只会创建一个图像,因此只能出现在您的一个按钮中。因此,在不知道其余代码的情况下,我假设您有两个分配了该样式的按钮。

解决此问题的方法是使用属性x:Shared="false"单独创建图像,然后设置内容。然后每次引用时都会创建一个新图像。

<Image x:Key="buttonImage" x:Shared="false" Source="/MyPrj;component/Images/mybutton.png"
       Width="24" Height="24" Margin="-2,-2-2,-1"/>

<Style x:Key="MyButtonStyle" Target="{x:Type Button">
    <Setter Property="Width" Value="28"/>
    <Setter Property="Height" Value="28"/>
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <Border Content="{StaticResource buttonImage}"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>