2016-04-15 2 views
0

Я работаю в этот момент времени с VS 2015 и WPF. Несколько недель назад я определил в App.xaml своего проекта шаблонный стиль для ToggleButton, чтобы пользователи могли видеть, если кнопка отмечена или нет. Первоначально содержимое переключателя было TextBlock с текстом. Теперь я хочу заменить этот текстовый блок на изображение. Далее я определил в App.xaml некоторые ресурсы для изображений.Невозможно показать изображение как содержимое WPF ToggleButton

Вот App.xaml:

<Application x:Class="WPFDesignerPrototyp.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:local="clr-namespace:WPFDesignerPrototyp" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <!-- Style for togglebuttons--> 
     <Style x:Key="toggleButtonStyle" TargetType="{x:Type ToggleButton}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <Border x:Name="outer" 
           BorderBrush="Black" 
           BorderThickness="1" 
           Margin="5,5,0,0" 
           Opacity=".9" 
           Background="Transparent"> 
          <Border x:Name="inner" 
             Margin="5" 
             BorderThickness="0" 
             Background="{Binding Background, RelativeSource={RelativeSource TemplatedParent}}"> 
           <Grid x:Name="container"> 
            <Grid.RowDefinitions> 
             <RowDefinition Height="2*"/> 
             <RowDefinition/> 
            </Grid.RowDefinitions> 
            <!--<TextBlock x:Name="display" 
               Grid.Row="1" 
               TextAlignment="Center" 
               Text="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}" 
               Margin="5,2,5,2"/>--> 
            <Image x:Name="displayimage" 
              Grid.Row="1" 
              HorizontalAlignment="Center" 
              Source="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}" 
              Margin="5,2,5,2"/> 
           </Grid> 
          </Border> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="ToggleButton.IsChecked" Value="True"> 
           <Setter TargetName="outer" Property="Background" Value="LightBlue"/> 
           <Setter TargetName="outer" Property="BorderBrush" Value="Transparent"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <Image x:Key="imageHorizontalAlignmentLeft" Source="C:/Utilities/VS 2015 ImageLibrary/2015_VSIcon/AlignLeft/AlignLeft_16x.png"/> 
     <Image x:Key="imageHorizontalAlignmentCenter" Source="C:/Utilities/VS 2015 ImageLibrary/2015_VSIcon/AlignStretchHorizontal/AlignStretchHorizontal_16x.png"/> 
     <Image x:Key="imageHorizontalAlignmentRight" Source="C:/Utilities/VS 2015 ImageLibrary/2015_VSIcon/AlignRight/AlignRight_16x.png"/> 
    </Application.Resources> 
</Application> 

Тогда - в моем окне WPF - я реализовал новый контент в одном из моих togglebuttons.

<ToggleButton x:Name="setAlignLeft" Grid.Row="1" Grid.Column="1" Content="{StaticResource imageHorizontalAlignmentLeft}" Style="{StaticResource toggleButtonStyle}" Click="setAlignLeft_Click"/> 

Но, к сожалению, ничего не происходит. Содержимое кнопки пуста. Так что я попробовал это с другой togglebutton, без стиля toggleButtonStyle и там он работал.

Я думаю, что в моем шаблоне должна быть ошибка, но я не знаю, где.

Может ли кто-нибудь помочь?

Спасибо заранее, Patrick

ответ

0

Вам нужно будет связываться с Content.Source родителя, как Content уже Image.

<Image x:Name="displayimage" 
    Grid.Row="1" 
    HorizontalAlignment="Center" 
    Source="{Binding Content.Source, RelativeSource={RelativeSource TemplatedParent}}" 
    Margin="5,2,5,2"/> 
+0

Thank You Nitin! Так оно и есть. –

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