2013-11-15 4 views
2

Я новичок в проекте, который использует C#/WPF/Telerik-Controls.C#/WPF: Назначение стиля программно

Существует этот стиль:

<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!

EDIT:

  • Добавлен тот факт, что проект использует Telerik-Controls.

  • исправлен стиль

+1

Путь изображения может быть проблемой. Попробуйте дать относительный путь по местоположению exe. –

+0

Проверьте окно вывода. Имеются ли какие-либо сообщения об изображении? – Gusdor

+0

Проверьте параметр «Маржа» на изображении. Это не выглядит правильно. – elgonzo

ответ

2

Существует несколько неизвестной причуда с Images в 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> 
+0

Я изменил «<Содержание границы» на «<Содержание кнопки». Это не помогло. – user2995410

+0

Не делай этого. В DataTemplate для кнопки вы не хотите добавлять новую кнопку. – AkselK

Смежные вопросы