WPF路径命令

时间:2016-08-02 17:15:20

标签: wpf xaml

所以我已经成功实现了一个带有自定义背景的按钮点击。这是xaml:

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

现在,有没有办法在Path对象本身上使用MVVM实现单击命令。我正在寻找的只有一个图标部分是可点击的(没有按钮对象的帮助)。使用按钮,可以单击整个生成的背景矩形,以便触发路径的事件。

2 个答案:

答案 0 :(得分:1)

如果你只想 填充的Path区域是可点击的,这将有效(只需交换你自己的Path,转换等东西):

<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做事方式:Button提供了Click事件,Command属性和一些可视化内容;如果您想要的只是Click事件和Command Property,请不要滚动您自己的Click事件;在丢弃视觉内容时使用Button的那些部分。

答案 1 :(得分:0)

根据Brandley的建议,以下是我设法以最少的编码更改来实现它的方法。我将按钮大小设置为与图标大小匹配,将背景设置为透明,边框宽度设置为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>