2013-05-02 2 views
0

Я немного неопытен в WPF и пытаюсь получить простой шаблон в WPF для кнопки с иконкой Image в дополнение к тексту для работы.Передача BitmapImage в качестве тега в DataTemplate

код Стиль:

<Style x:Key="DatabaseButtonWithImageTag" TargetType="Button" BasedOn="{StaticResource DatabaseButton}"> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="1*" /> 
         <ColumnDefinition Width="2*" /> 
        </Grid.ColumnDefinitions> 

        <Image Grid.Column="0" Width="100" Source="{TemplateBinding Tag}" /> 
        <ContentControl Grid.Column="1" Content="{TemplateBinding Content}" /> 
       </Grid> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Посмотреть код:

 <Image Source="{StaticResource image_new_patient}"/> 
    <Button Style="{StaticResource DatabaseButtonWithImageTag}" Tag="{StaticResource image_new_patient}" Width="150" Height="100"> 
     Test! 
    </Button> 

изображение вне кнопки отображается, так "Test!", Но нет изображения внутри кнопки.

Что я делаю неправильно?

+0

возможно дубликат [кнопка Изменить WPF фоновое изображение программно] (http://stackoverflow.com/questions/15819796/change-wpf-button- background-image-programatically) –

ответ

0

TemplateBinding не работает в DataTemplate.

Вы можете использовать этот workaroud:

<Window.Resources> 
    <BitmapImage x:Key="image_new_patient" UriSource="bsp.jpg" /> 
    <local:ImageConverter x:Key="imageConverter" /> 
    <Style x:Key="DatabaseButtonWithImageTag" TargetType="Button"> 
     <Setter Property="ContentTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="1*" /> 
          <ColumnDefinition Width="2*" /> 
         </Grid.ColumnDefinitions> 

         <Image Grid.Column="0" Width="100" Source="{Binding RelativeSource={RelativeSource AncestorType=Button}, Path=Tag}" /> 

         <ContentControl Grid.Column="1" Content="{TemplateBinding Content}" /> 
        </Grid> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

</Window.Resources> 
<StackPanel> 
    <Image Source="{StaticResource image_new_patient}" Width="50"/> 
    <Button Style="{StaticResource DatabaseButtonWithImageTag}" Tag="{StaticResource image_new_patient}" Width="150" Height="100"> 
     Test! 
    </Button> 

</StackPanel> 

+0

Большое спасибо, это работает :) – Maverick