2016-08-02 1 views
1

Так что я успешно реализовал кнопку с настраиваемым фоном. Вот XAML:Команда пула WPF

<Button 
    HorizontalAlignment="Left" 
    Grid.Row="0" 
    Grid.Column="0" 
    Command="{Binding PreferencesClickedCmd}" 
    > 
    <Path 
     Data="..." 
     Stretch="Uniform" 
     Fill="#FF070707" 
     Width="16" 
     Height="16" 
     Margin="0,0,0,0" 
     RenderTransformOrigin="0.5,0.5" 
     > 
     <Path.RenderTransform> 
      <TransformGroup> 
       <TransformGroup.Children> 
        <RotateTransform Angle="0" /> 
        <ScaleTransform ScaleX="1" ScaleY="1" /> 
       </TransformGroup.Children> 
      </TransformGroup> 
     </Path.RenderTransform> 
    </Path> 
</Button> 

Теперь есть способ реализовать команду щелчком с MVVM на самом Path объекта. То, что я ищу, чтобы иметь только часть значка для клики (без помощи объекта кнопки). С кнопкой можно щелкнуть весь сформированный прямоугольник фона, чтобы вызвать событие для Пути.

+1

MVVM Light в 'EventToCommand' может быть в состоянии сделать это, если' Path' есть событие щелчка. Если вы не хотите использовать это, вы можете использовать вложенную кнопку «Button», где внутренняя обтекает путь по его точному размеру, стилизованный, чтобы он не имел границы или фона. –

+0

Да, спасибо за ваш ответ. С вашими предложениями мне удалось реализовать его с минимальными изменениями в исходном коде, установив размер кнопки в размере значка и задав фон прозрачным. – lucas

ответ

1

Если вы хотите только заполненную область Путь быть интерактивными, это будет работать (просто поменять в своем собственном пути, преобразования и т.д. материал):

<Button 
    Command="{Binding PreferencesClickedCmd}" 
    > 
    <Button.Content> 
     <Path Data="M 8,0 L 0,16 L 16,0 Z" Fill="SlateBlue" /> 
    </Button.Content> 
    <Button.Template> 
     <ControlTemplate TargetType="Button"> 
      <ContentPresenter /> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

Вся визуальная презентация кнопки заменяется только содержимым в отдельности, а части кнопки, которые не заполняются путем, не могут быть интерактивными, потому что они прозрачны.

Если вы хотите, чтобы все это, чтобы быть интерактивными, просто дать шаблону фон, который не так вполне прозрачна:

<ControlTemplate TargetType="Button"> 
    <Grid Background="#01ffffff"> 
     <ContentPresenter /> 
    </Grid> 
</ControlTemplate> 

Это MVVM способ делать вещи: Кнопка обеспечивает Click событие, и Свойство Command и некоторые визуальные материалы; если все, что вам нужно, - это событие Click и свойство Command, не сверните свой собственный клик; используйте те части кнопки при отбрасывании визуального материала.

+0

Отличное решение, спасибо – lucas

0

Согласно предложению Брандли, вот как мне удалось реализовать его с минимальными изменениями в кодировке. Я установил размер кнопки, чтобы соответствовать размеру значка, установить фон для прозрачной и границы ширины до 0:

<Button HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Margin="5,0,0,0" Width="30" Height="30" BorderThickness="0" Background="Transparent" Command="{Binding PreferencesClickedCmd}"> 
      <Path Data="..." Stretch="Uniform" Fill="#FF070707" Width="16" Height="16" Margin="0,0,0,0" RenderTransformOrigin="0.5,0.5"> 
       <Path.RenderTransform> 
        <TransformGroup> 
         <TransformGroup.Children> 
          <RotateTransform Angle="0" /> 
          <ScaleTransform ScaleX="1" ScaleY="1" /> 
         </TransformGroup.Children> 
        </TransformGroup> 
       </Path.RenderTransform> 
      </Path> 
     </Button> 
Смежные вопросы