2

我是使用 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 像素。

但它不显示图像!该按钮改为显示文本“图像”

我究竟做错了什么?

蒂亚!

编辑:

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

  • 更正了样式

4

1 回答 1

3

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

解决这个问题的方法是使用属性单独创建图像 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>
于 2013-11-15T09:26:56.960 回答