Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GeometryDrawing WPF创建按钮_Wpf - Fatal编程技术网

使用GeometryDrawing WPF创建按钮

使用GeometryDrawing WPF创建按钮,wpf,Wpf,嗨,我正在尝试创建一个带有半圆弧形状的按钮,如下所示: 我使用的是xaml和控件模板,它工作得很好,但是,按钮接收到单击事件,即使我通过几何体在矩形形状中单击任何部分,它也会启动单击事件,我希望事件仅在几何体中捕获。。。 这是xaml <ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}"> <Grid> <Image> <Image

嗨,我正在尝试创建一个带有半圆弧形状的按钮,如下所示:

我使用的是xaml和控件模板,它工作得很好,但是,按钮接收到单击事件,即使我通过几何体在矩形形状中单击任何部分,它也会启动单击事件,我希望事件仅在几何体中捕获。。。 这是xaml

<ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}">
    <Grid>
       <Image>
        <Image.Source>
                   <DrawingImage>
                  <DrawingImage.Drawing>
            <GeometryDrawing x:Name="X"Geometry= "M 0,0 
                A .8,.8 180 1 1 0,4
                L 0,3
                A .6,.6 180 1 0 0,1
                L 0,0">
                <GeometryDrawing.Pen>
                <Pen Brush="Black" Thickness=".1" />
                </GeometryDrawing.Pen>
                <GeometryDrawing.Brush>
                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                  <GradientStop Offset="0" Color="Blue"/>
                  <GradientStop Offset="1" Color="Red"/>
                </LinearGradientBrush>
                </GeometryDrawing.Brush>
            </GeometryDrawing>
              </DrawingImage.Drawing>
                 </DrawingImage>
              </Image.Source>
               </Image>
               <Viewbox>
            <ContentControl Margin="20" Content="{TemplateBinding Content}"/>
        </Viewbox>
    </Grid>
</ControlTemplate>

...

<Button Template="{StaticResource ButtonTemplate}" Click="Button_Click" HorizontalAlignment="Right">OK</Button>

...
好啊

感谢您的评论,您可以在几何体数据中使用路径元素,而不是使用具有矩形边界(用于命中测试)的图像。路径将仅在轮廓定义的区域上执行命中测试。除非您在ContentPresenter上设置了IshitteVisible=“false”,否则设置的任何文本或其他内容也将可单击

<Button Content="OK">
    <Button.Template>
        <ControlTemplate TargetType="{x:Type Button}">
            <Grid>
                <Path Data="M 0,0 
        A .8,.8 180 1 1 0,4
        L 0,3
        A .6,.6 180 1 0 0,1
        L 0,0" Stroke="Black" StrokeThickness="1" Stretch="Uniform">
                    <Path.Fill>
                        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                            <GradientStop Offset="0" Color="Blue"/>
                            <GradientStop Offset="1" Color="Red"/>
                        </LinearGradientBrush>
                    </Path.Fill>
                </Path>
                <Viewbox>
                    <ContentPresenter Margin="20" />
                </Viewbox>
            </Grid>
        </ControlTemplate>
    </Button.Template>
</Button>

指向图像的链接已断开。